gpt4 book ai didi

c - 当我在某个地方输入字符时,While 循环永远不会停止

转载 作者:行者123 更新时间:2023-11-30 14:51:46 24 4
gpt4 key购买 nike

当我输入 ˋscanfˋ 的字符时,此循环出现问题。循环永远不会停止。但是当我输入一个数字时一切正常。

这是代码:

#include <stdio.h>
#include <stdlib.h>

int main() {

int x;

printf("Enter 1 Or 2\n");
scanf("%i",&x);

while (x!=1 && x!=2) {

printf("Please Enter A Right Value \n");
scanf("%i",&x);
}

printf("Finish");
}

最佳答案

好吧,当您输入字符时,scanf 实际上会尝试从 stdin 获取这些错误的字符输入,但由于它不符合转换规范,因此它会失败。然后它将这些错误的输入保留在标准输入中。下次 scanf 由于这些错误的输入而再次失败。因此,您需要在尝试使用 scanf 再次获取输入之前清除它。还要检查 scanf 的返回值,如果失败则清除 stdin

提供的代码检查 EOF 并返回 scanf 的值,该标准明确说明了 scanf 的返回值:-

<强> 7.21.6.2p16

The fscanf function returns the value of the macro EOF if an input failure occurs before the first conversion (if any) has completed. Otherwise, the function returns the number of input items assigned, which can be fewer than provided for, or even zero, in the event of an early matching failure.

代码类似于 this 。 (这是使用 scanf)。

最好使用fgets。您可以轻松且更好地控制错误输入。使用fgets,您将读取整行,然后使用strtolstrtoul解析其中的整数输入。是的,如果是整数输入,也会出现这种情况 - 您需要检查解析的 long 或 unsigned long 的大小是否正确,以便将它们保存在 int 变量中。

关于c - 当我在某个地方输入字符时,While 循环永远不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48022341/

24 4 0
文章推荐: c - 在 C 宏中的字符串化之前进行标记串联
文章推荐: javascript - 追加