This question already has answers here:
Closed last year.
Scanf skips every other while loop in C
(10个答案)
对输入中的+ve、-ve和零进行计数的程序。for循环中的printf语句被多次执行。如何更正此代码。计数正确,但输出不是预期格式。
输出:
(10个答案)
对输入中的+ve、-ve和零进行计数的程序。for循环中的printf语句被多次执行。如何更正此代码。计数正确,但输出不是预期格式。
#include<stdio.h>
main()
{
int n,pc,nc,zc;
char s;
pc=nc=zc=0;
for(;1;) {
printf("do you wanna enter: y/n\n");
s=getchar();
if(s=='y') {
printf("enter num:\n");
scanf("%d",&n);
if(n>0) {
pc+=1;
}
if(n<0) {
nc+=1;
}
if(n==0) zc+=1;
}
if(s=='n') break;
}
printf("No.of +ve num: %d \n",pc);
printf("No.of -ve num: %d \n",nc);
printf("No.of zeroes: %d \n",zc);
}
输出:
xplorer@kali:~/Desktop/docs/yk/chap3$ ./a.out
do you wanna enter: y/n
y
enter num:
4
do you wanna enter: y/n
do you wanna enter: y/n
y
enter num:
8
do you wanna enter: y/n
do you wanna enter: y/n
y
enter num:
-7
do you wanna enter: y/n
do you wanna enter: y/n
n
No.of +ve num: 2
No.of -ve num: 1
No.of zeroes: 0
最佳答案
\n
被前一次调用getchar
留在输入缓冲区中,因为它一次读取一个字符。因为'\n'也是一个字符,所以n下一次迭代getchar
读取\n
剩余的内容。
您需要刷新输入缓冲区:
int c;
while((c = getchar()) != '\n' && c != EOF);
关于c - 为什么printf语句多次执行? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24379366/
10-10 09:53