getchar() 在 c 中不起作用

getchar() not working in c

getchar() 在下面的程序中不起作用,谁能帮我解决这个问题。我尝试用 scanf() 函数代替 getchar() 然后它也不起作用。

我无法找出问题的根本原因,任何人都可以帮助我。

#include<stdio.h>
int main()
{
        int x, n=0, p=0,z=0,i=0;
        char ch;

        do
        {
                printf("\nEnter a number : ");
                scanf("%d",&x);

                if (x<0)
                        n++;
                else if (x>0)
                        p++;
                else
                        z++;

                printf("\nAny more number want to enter : Y , N ? ");
                ch = getchar();

                i++;

        }while(ch=='y'||ch=='Y');
        printf("\nTotal numbers entered : %d\n",i);
        printf("Total Negative Number : %d\n",n);
        printf("Total Positive number : %d\n",p);
        printf("Total Zero            : %d\n",z);
        return 0 ;
}

代码是从"Yashvant Kanetkar"

的书上复制过来的

我认为,在您的代码中,问题出在

中剩余的 \n
 scanf("%d",&x);

您可以将扫描语句更改为

scanf("%d%*c",&x);    

吃掉 newline。然后下一个 getchar() 将等待用户输入,如预期的那样。

也就是说,getchar()的return类型是int。您可以查看 man page 了解详细信息。因此,returned 值可能并不总是适合 char。建议将 chchar 更改为 int

最后main()推荐的签名是int main(void).

当用户输入 x 并按下回车键时,换行符留在输入流中 scanf() operation.Then 之后,当您尝试使用 [=13 读取字符=] 它读取相同的换行符 character.In short ch 获取换行符的值 character.You 可以使用循环来忽略换行符。

ch=getchar();
while(ch=='\n')
ch=getchar();

那是因为 scanf() 在输入中留下了尾随的换行符。

我建议更换这个:

ch = getchar();

与:

scanf(" %c", &ch);

注意格式字符串中的前导 space。需要强制 scanf() 忽略每个白色 space 字符,直到读取非白色 space 为止。这通常比在之前的 scanf() 中使用单个字符更可靠,因为它忽略了 any 个空格。

当您使用 scanf getchar 等时,您输入的所有内容都作为字符串(字符序列)存储在 stdin(标准输入)中,然后程序使用需要的内容将遗体留在 stdin

例如:456是{'4','5','6','[=14=]'},4tf是{'4','t','f','[=15=]'}scanf("%d",&x);你让程序读一个整数在第一种情况下会读到456然后留下{'[=17= ]'}stdin 中,在第二个中将读取 4 并留下 {''t','f',[=19=]'}

scanf 之后你应该使用 fflush(stdin) 来清除输入流。

scanf(" %c", &ch); 替换 ch = getchar(); 对我来说效果很好!

但是在 scanf 之后使用 fflush(stdin) 无效。