| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 615 人关注过本帖
标题:为什么 主函数 中的getchar函数不显示啊!!!
只看楼主 加入收藏
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
为什么 主函数 中的getchar函数不显示啊!!!
这个代码是用来随机出现加减乘除4种体型的。输入N退出。然后显示 每种题目出现的次数 和 做对的次数。
现在问题是,出现If you want to exit the quit,press 'N' !! Or press any other keys.之后,就直接在进入循环,不等待我getchar,这是为什么?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
int random(int a,int b);
void add(int m,int n,int a[],int b[]);
void sub(int m,int n,int a[],int b[]);
void mul(int m,int n,int a[],int b[]);
void divi(int m,int n,int a[],int b[]);
 
void main()
{
    int m,n,i;
    int total[4]={0},right[4]={0};
    char c;
    srand((unsigned)time(NULL));
 
    do
    {
        m=random(1,100);n=random(1,100);
        i=random(1,4);
        switch(i)
        {
            case(1):add(m,n,total,right);break;
            case(2):sub(m,n,total,right);break;
            case(3):mul(m,n,total,right);break;
            case(4):divi(m,n,total,right);break;
        }
        printf("If you want to exit the quit,press 'N' !! Or press any other keys.\n\n");
        c=getchar();
        fflush(stdin);
    }
    while(c!='N');
 
    printf("\nYou have done %d addition, right in %d.\n",total[0],right[0]);
    printf("You have done %d subtraction, right in %d.\n",total[1],right[1]);
    printf("You have done %d multipliaction, right in %d.\n",total[2],right[2]);
    printf("You have done %d divition, right in %d.\n",total[3],right[3]);
}
 
/************* 播种 *************/
int random(int a,int b)
{
    int i;
    i=rand()%(b-a+1)+a;
    return(i);
}
 
/************* 加法 *************/
void add(int m,int n,int x[],int y[])
{
    int a;
    x[0]++;
    printf("%d+%d=",m,n);
    scanf("%d",&a);
    if(m+n==a)
        {printf("Great\n"); y[0]++;}
    else printf("It doesn't matter,try another\n");
}
 
/************* 减法 *************/
void sub(int m,int n,int x[],int y[])
{
    int a,i,j;
    x[1]++;
    printf("%d-%d=",i=m>n?m:n,j=m<n?m:n);
    scanf("%d",&a);
    if(i-j==a)
        {printf("Great\n"); y[1]++;}
    else printf("It doesn't matter,try another\n");
}
 
/************* 乘法 *************/
void mul(int m,int n,int x[],int y[])
{
    int a;
    x[2]++;
    printf("%d*%d=",m,n);
    scanf("%d",&a);
    if(m*n==a)
        {printf("Great\n"); y[2]++;}
    else printf("It doesn't matter,try another\n");
}
 
/************* 除法 *************/
void divi(int m,int n,int x[],int y[])
{
    int a;
    x[3]++;
    while(m%n!=0)
    {
        m=random(1,100);n=random(1,100);
    }
    printf("%d÷%d=",m,n);
    scanf("%d",&a);
    if(m/n==a)
        {printf("Great\n"); y[3]++;}
    else printf("It doesn't matter,try another\n");
}

[ 本帖最后由 smile_line 于 2013-5-26 18:47 编辑 ]
搜索更多相关主题的帖子: include void 
2013-05-26 18:46
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:10 
  c=getchar();
  fflush(stdin);
把fflush(stdin);调到  c=getchar(); 前面


三十年河东,三十年河西,莫欺少年穷!
2013-05-26 20:22
行书万里
Rank: 2
等 级:论坛游民
帖 子:11
专家分:40
注 册:2012-7-12
收藏
得分:10 
你输入第一个计算的结果后,按下回车键,回车键被送入了缓冲区,getchar()会将缓冲区的内容读走,所以会直接循环。
2楼的方法可行。

[ 本帖最后由 行书万里 于 2013-5-26 22:25 编辑 ]
2013-05-26 22:23
smile_line
Rank: 2
等 级:论坛游民
帖 子:65
专家分:19
注 册:2013-3-3
收藏
得分:0 
以下是引用行书万里在2013-5-26 22:23:32的发言:

你输入第一个计算的结果后,按下回车键,回车键被送入了缓冲区,getchar()会将缓冲区的内容读走,所以会直接循环。
2楼的方法可行。
在请教一下,getchar到底是怎么从缓冲区取数的?
2013-05-27 16:21
快速回复:为什么 主函数 中的getchar函数不显示啊!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013123 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved