gpt4 book ai didi

c - C 中的 for 循环和 getchar()

转载 作者:行者123 更新时间:2023-11-30 16:34:20 26 4
gpt4 key购买 nike

为什么代码偶数次直接获取到空数据?我不知道发生了什么事。非常感谢。

    #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");
}

}

}

enter image description here

如果我输入一个运算符,它会循环两次。第二次是空输入。

最佳答案

假设您输入了 a,然后输入了 Enter

第一次调用 getchar() 返回 a,但换行符仍保留在输入流中。下一次调用 getchar() 将返回换行符,而不等待您的输入。

有很多方法可以解决这个问题。最简单的方法之一是在调用 getchar() 之后忽略该行的其余部分。

ch = getchar();

// Ignore the rest of the line.
int ignoreChar;
while ( (ignoreChar = getchar()) != '\n' && ignoreChar != EOF );

您可以将其包装在函数中。

void ignoreLine(FILE* in)
{
int ch;
while ( (ch = fgetc(in)) != '\n' && ch != EOF );
}

并使用

ch = getchar();

// Ignore the rest of the line.
ignoreLine(stdin);

关于c - C 中的 for 循环和 getchar(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49356171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com