for循环和getchar()在C
问题描述:
为什么代码直接在偶数时间获取空数据?我不知道发生了什么事。 非常感谢。for循环和getchar()在C
#include <stdio.h>
#pragma warning(disable : 4996)
void main() {
int f, a = 10, b = 20;
for (int i = 0; i < 5; i++)
{
char ch;
ch = getchar();
printf("ch = %c\n", ch);
switch (ch)
{
case '+': f = a + b; printf("f = %d\n", f); break;
case '−': f = a - b; printf("f = %d\n", f); break;
case '*': f = a * b; printf("f = %d\n", f); break;
case '/': f = a/b; printf("f = %d\n", f); break;
default: printf("invalid operator\n");
}
}
}
如果我输入一个运营商,它循环两次。第二次是空的输入。
答
比方说,您输入a
后跟输入。
getchar()
的第一个呼叫返回a
,但换行符仍留在输入流中。下一次拨打getchar()
将返回换行符而不用等待输入。
有很多方法可以解决这个问题。最简单的方法之一是在getchar()
的电话后忽略该行的其余部分。
ch = getchar();
// Ignore the rest of the line.
int ignoreChar;
while ((ignoreChar = getchar()) != '\n' && ignoreChar != EOF);
答
如果你不想改变很多在你的代码,我建议刚插入另一getchar
在for循环消费“\ n”结尾:
#include <stdio.h>
#pragma warning(disable : 4996)
void main() {
int f, a = 10, b = 20;
for (int i = 0; i < 5; i++)
{
char ch;
ch = getchar();
printf("ch = %c\n", ch);
switch (ch)
{
case '+': f = a + b; printf("f = %d\n", f); break;
case '−': f = a - b; printf("f = %d\n", f); break;
case '*': f = a * b; printf("f = %d\n", f); break;
case '/': f = a/b; printf("f = %d\n", f); break;
default: printf("invalid operator\n");
}
getchar();
}
}
请详细说明什么不工作,以及预期的结果是什么 –
每次输入任何操作员时,都会显示以下信息。 “ch = invalid operator” –
其他注意事项:1)使用'int main(void)'2)'ch'应该是一个'int'。 –