/* 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;
}
honglianqxw123 于 2014-05-26 07:10:38发表:
了解,学习了。
zyy_hz 于 2013-05-31 12:43:23发表:
学习了。
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;
}
sgx 于 2013-03-08 17:49:37发表:
从书上找到的答案:
键盘缓冲区是用来存储键盘输入的内存。scanf()函数是在键盘缓冲区查找输入数据,而不是直接从键盘上读取数据。
标准输入和输出--键盘和平面--有两个缓冲区:一个用于输入,另一个用于输出。标准输入输出流分别称为stdin和stdout。要知道键盘输入缓冲区,只需使用名称stdin。标准函数fflush()就是用于清除缓冲区的。这个函数多半用于文件,但事实上它可以用于任何缓冲区。只要将流名称作为参数传递给该函数,就知道了要清除哪个缓冲区。
清除输入缓冲区:[code]fflush(stdin);[/code]
pl_014 于 2013-03-05 22:26:22发表:
按道理讲,应该不需要考虑更多的问题,不知道你是否愿意试试getchar。
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.
sgx 于 2013-03-05 09:20:53发表:
是缓存的问题,谢谢大家。
我用的是Cygwin 里的gcc 4.5.3
于 2013-03-05 09:18:13发表:
是缓存的问题,谢谢大家。
我用的是Cygwin 里的gcc 4.5.3
于 2013-03-05 09:14:31发表:
嗯,是缓存的问题,谢谢大家。
我用的是windows下的 lcc-win32
和Cygwin 里的gcc
$ gcc --version
gcc (GCC) 4.5.3
Ddrmail 于 2013-03-05 08:49:26发表:
纯路过
RH204 于 2013-03-05 01:47:37发表:
可以再中间加一个缓存清除的命令,就可以了。
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]
zhengl9008 于 2013-03-04 14:43:02发表:
因为你第一次scanf的时候输入了一个回车符,那个回车符缓存在键盘的缓冲区,所以你第二次输入就直接跳过了!
sgx 于 2013-03-04 12:57:25发表:
这是一个求平均数的小程序。用lcc-win编译通过,但执行时会跳过键盘输入;用gcc编译通过,执行时也会跳过键盘输入。不知为何,请高手赐教。:0wmjh(1