c - 为什么 printf 语句被执行了不止一次?

标签 c linux loops

<分区>

计算输入中 +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/

相关文章:

c - 函数内的 getline 安全实践

c - 使用 syslog 函数将日志值插入数据库

c++ - 编译 c++ 文件时得到 'Command not Found'

linux - 禁止在 x86/x86_64 上进行未对齐的内存访问

loops - 所有while循环都可以转换为for循环吗?

c - 如何在C程序中一个接一个地运行多个输入文件

c - 使用 Millis() 的 Arduino 草图循环

Linux bash 脚本 : share variable among terminal windows

excel - 用excel处理变量

c++ - 在 C++ 中将 for 循环转换为 while 循环