我正在尝试创建一个用户应该输入字符'a'的简单程序。它应该循环直到输入'a'。如果没有正确的输入,我会打印一条声明。如果输入了错误的字母或数字,还有另一种说法,但问题是这导致程序多次循环并且多次打印语句。任何帮助解决这个问题都是值得赞赏的。
#include <stdio.h>
int main()
{
char input;
int i, len,num;
len = 1;
do
{
puts("Please enter alphabet 'a': ");
scanf("%c", &input);
for(i=0; i<len; i++)
{
if(isalpha(input)==0)
{
printf("Please input something.\n");
continue;
}
if(input == 'A' || input == 'a')
{
printf("Congratulations! You successfully input letter 'a'.");
return(0);
}
else
{
printf("That's not letter 'a'.");
}
}
}
while(1);
}
答案 0 :(得分:1)
在第一次输入之后缓冲区中有一个换行符,它没有被刷新,并且在第二次迭代中被%c
拾取。
将scanf()
更改为
scanf(" %c", &input);
请注意占用换行符
的%c
之前的空格
答案 1 :(得分:1)
问题是输入字符后,按下换行符,然后发送到输入缓冲区。现在,下一次调用scanf()
时,它会从缓冲区读取值'\n'
和scanf()
,从而将其存储到input
。现在,这可以通过@Gopi指出的方法轻松解决,但有更好的方法。这是代码。
#include <stdio.h>
#include<ctype.h>
int main()
{
char input,ch;
do
{
puts("Please enter alphabet 'a': ");
scanf("%c", &input);
while( input!='\n' && (ch=getchar())!='\n' && ch!= EOF); // look here
if(isalpha(input)==0)
{
printf("Please input something.\n");
continue;
}
if(input == 'A' || input == 'a')
{
printf("Congratulations! You successfully input letter 'a'.");
return(0);
}
else
{
printf("That's not letter 'a'.");
}
}
while(1);
}
现在使用语句while((ch=getchar())!='\n' && ch!= EOF);
,所有字符(如'\n'
)都只是刷新而不存储到input
,从而解决了问题。
另请注意,此处不需要for循环,此代码无用(除非这不是您的原始代码,其中还有其他部分)。