当我在一个地方输入一个字符时,循环永远不会停止[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

当我为'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");
}
c
1个回答
1
投票

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

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

7.21.6.2p16

如果在第一次转换(如果有)完成之前发生输入故障,则fscanf函数返回宏EOF的值。否则,该函数返回分配的输入项的数量,如果早期匹配失败,则可以少于提供的数量,甚至为零。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.