红联Linux门户
Linux帮助

c程序求助

发布时间:2013-03-04 12:55:24来源:红联作者:sgx
代码如下,红色的部分是多加上去的,看上去是重复的,但是不加的话,程序执行时就会跳过键盘输入,不知为何。

/* Program 4.6 The almost indefinite loop - coomputing an average */
#include
#include
int main(void)
{
char answer='N';
double total=0.0;
double value=0.0;
int count=0;

printf("\nThis program calculates the average of any number of values.");
for(;;)
{
printf("\nEnter a value:");
scanf("%lf",&value);
total+=value;
++count;

printf("Do you want to enter another value? (Y or N): ");
scanf("%c",&answer);
scanf("%c",&answer);
if(tolower(answer)=='n')
break;
}
printf("\nThe average is %.2lf\n",total/count);
return 0;
}
文章评论

共有 14 条评论

  1. honglianqxw123 于 2014-05-26 07:10:38发表:

    了解,学习了。

  2. zyy_hz 于 2013-05-31 12:43:23发表:

    学习了。

  3. liyongqiang2420 于 2013-04-11 12:29:58发表:

    #include
    int main(void)
    {
    char answer='N';
    double total=0.0;
    double value=0.0;
    int count=0;

    printf("\nThis program calculates the average of any number of values.");
    for(;;)
    {
    printf("\nEnter a value:");
    scanf("%lf",&value);
    total+=value;
    ++count;

    printf("Do you want to enter another value? (Y or N): ");
    getchar();
    scanf("%c",&answer);
    if(tolower(answer)=='n')
    break;
    }
    printf("\nThe average is %.2lf\n",total/count);
    return 0;
    }

  4. sgx 于 2013-03-08 17:49:37发表:

    从书上找到的答案:
    键盘缓冲区是用来存储键盘输入的内存。scanf()函数是在键盘缓冲区查找输入数据,而不是直接从键盘上读取数据。
    标准输入和输出--键盘和平面--有两个缓冲区:一个用于输入,另一个用于输出。标准输入输出流分别称为stdin和stdout。要知道键盘输入缓冲区,只需使用名称stdin。标准函数fflush()就是用于清除缓冲区的。这个函数多半用于文件,但事实上它可以用于任何缓冲区。只要将流名称作为参数传递给该函数,就知道了要清除哪个缓冲区。
    清除输入缓冲区:[code]fflush(stdin);[/code]

  5. pl_014 于 2013-03-05 22:26:22发表:

    引用:
    4# pl_014

    在debian gcc 4.7.2下也是如此,是在要求输入(Y or N):时跳过键盘输入。
    ymls@debian:~$ gcc --version
    gcc (Debian 4.7.2-5) 4.7.2
    Copyright (C) 2012 Free Software Foundation, Inc.
    This is ...
    sgx 发表于 2013-3-5 21:50

    按道理讲,应该不需要考虑更多的问题,不知道你是否愿意试试getchar。

  6. sgx 于 2013-03-05 21:50:45发表:

    4# pl_014

    在debian gcc 4.7.2下也是如此,是在要求输入(Y or N):时跳过键盘输入。
    ymls@debian:~$ gcc --version
    gcc (Debian 4.7.2-5) 4.7.2
    Copyright (C) 2012 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  7. sgx 于 2013-03-05 09:20:53发表:

    是缓存的问题,谢谢大家。
    我用的是Cygwin 里的gcc 4.5.3

  8. 于 2013-03-05 09:18:13发表:

    是缓存的问题,谢谢大家。
    我用的是Cygwin 里的gcc 4.5.3

  9. 于 2013-03-05 09:14:31发表:

    嗯,是缓存的问题,谢谢大家。
    我用的是windows下的 lcc-win32
    和Cygwin 里的gcc
    $ gcc --version
    gcc (GCC) 4.5.3

  10. Ddrmail 于 2013-03-05 08:49:26发表:

    纯路过

  11. RH204 于 2013-03-05 01:47:37发表:

    可以再中间加一个缓存清除的命令,就可以了。

  12. pl_014 于 2013-03-04 14:43:04发表:

    我这去掉这句就没问题,不会跳过输入,楼主用的是哪个版本的gcc?[code]$ gcc --version
    gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
    Copyright (C) 2011 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    [/code]

  13. zhengl9008 于 2013-03-04 14:43:02发表:

    因为你第一次scanf的时候输入了一个回车符,那个回车符缓存在键盘的缓冲区,所以你第二次输入就直接跳过了!

  14. sgx 于 2013-03-04 12:57:25发表:

    这是一个求平均数的小程序。用lcc-win编译通过,但执行时会跳过键盘输入;用gcc编译通过,执行时也会跳过键盘输入。不知为何,请高手赐教。:0wmjh(1