我正在尝试编写一个简单的代码,该代码将从输入中读取字符并执行“正确”或“错误输入”,然后再次运行代码,直到输入正确的输入。首先,它不适用于大写X。我想解决的另一个问题是,在输入错误后,我必须按回车键才能得到“Enter x”消息,而不是在输入错误消息后立即进入。
#include <stdio.h>
int main()
{
do
{
printf("Enter x\n");
if (getchar()=='x'|| getchar()=='X')
{
printf("Entered char is X\n");
return 0;
}
else
{
printf("Input incorrect! Please try again!!!\n");
}
}
while (getchar()!='x' || getchar()!='X');
return 0;
}
最佳答案
您需要将输入存储在变量中,否则每次 getchar
调用都会连续多次请求输入。
由于奇怪的历史原因,getchar
实际上返回一个 int
,因为可以从它返回的值 EOF
是一个 int
。所以变量必须是int
。
最后,每次用户按下 Enter 键时,一个不可见的换行符 \n
就会附加到输入流中。这个角色对你没有好处,所以你应该放弃它并额外阅读。
#include <stdio.h>
int main (void)
{
int input;
do
{
printf("Enter x\n");
input = getchar();
getchar(); // extra getchar to chew up line feed from stdin
if (input=='x'|| input=='X')
{
printf("Entered char is X\n");
}
else
{
printf("Input incorrect! Please try again!!!\n");
}
} while (input!='x' && input!='X');
return 0;
}
请注意 input=='x'|| 的反义词input=='X'
是 input!='x' && input!='X'
(德摩根定律)。 “如果输入不是‘x’并且输入不是‘X’则循环”。
关于c - 如何修复 - 使用 getchar() 和 do-while 的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55373857/