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
。建议将 ch
从 char
更改为 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)
无效。
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
。建议将 ch
从 char
更改为 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)
无效。