gpt4 book ai didi

c - C 中循环跳过 getchar?

转载 作者:行者123 更新时间:2023-12-03 07:50:10 26 4
gpt4 key购买 nike

我正在用 C 编写一个简单的程序,要求用户循环输入,直到在提示时输入字母 Q。然而,当我运行该程序时,它立即跳过输入字符的提示,并要求用户输入另一个输入。知道为什么会发生这种情况以及如何解决它吗?

这是我的代码:

    while (exit != 'q' && exit != 'Q') {
printf("Please enter the grade for assignment #%d: ", assignmentNumber);
scanf("%lf", &gradeInput);

printf("Press q to quit, press any other character to continue: ");
exit = getchar();
}

我尝试将 getchar 更改为 scanf(%c%*c) 就像我看到有人在具有类似问题的帖子下提出的建议一样。它确实做到了,因此输入字符的提示确实有效,但输入 Q 时循环不再结束。

最佳答案

问题是 getchar() 从输入行中读取用户键入的 float 之后的下一个字符。这可以是任何内容,但在大多数情况下,当用户按 Enter 键时,该字符将是存储到输入流中的换行符。

您应该将程序修改为:

  • 一次读取一行输入
  • 检查文件结尾
  • 检查用户输入是否成功转换为数字

这是修改后的版本:

#include <stdio.h>

int main() {
double gradeInput;
int assignmentNumber = 1;

for (;;) {
char input[128];
printf("Please enter the grade for assignment #%d: ", assignmentNumber);
if (!fgets(input, sizeof input, stdin)) {
/* end of file */
break;
}
if (sscanf(input, "%lf", &gradeInput) != 1) {
printf("invalid input: %s\n", input);
continue;
}
/* handle the grade */
// [...]
assignmentNumber++;

printf("Press q to quit, press any other character to continue: ");
if (!fgets(input, sizeof input, stdin)) {
/* end of file */
break;
}
if (input[0] == 'q' || input[0] == 'Q')
break;
}
return 0;
}

关于c - C 中循环跳过 getchar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77384311/

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