为什么非整数输入会导致无限循环?

埃尔辛·耶尔马兹·阿斯兰

当我输入一个非整数值时,它会导致无限循环。我需要更换 scanf 吗?如果是这样,我该怎么做。

int num=1;
if(num==1){
  int slct;
  printf("\n\tWelcome");
  printf("\n1. Login\n2. Register\n3. Account\n4. Exit\n");
  SELECTION: ;
  printf("\n\tEnter a number:");
  scanf("%d",&slct);
  if (slct == 1){}
  else if (slct == 2){}
  else if (slct == 3){}
  else if (slct == 4){
    return 0;
  } else {
    goto SELECTION;
  }
}
布鲁诺·赖斯曼

您需要检查返回值scanf并刷新输入:

#include <stdbool.h>
#include <stdio.h>

int main()
{
    bool done = false;
    while (!done) {
        printf("\n\tWelcome\n");
        printf("1. Login\n");
        printf("2. Register\n");
        printf("3. Account\n");
        printf("4. Exit\n\n");
        printf("Enter a number:");
        int selection;
        int result = scanf("%d", &selection);
        if (EOF == result) {
            done = true;
        }
        else if (1 != result) {
            printf("You did not enter a valid number\n");
            int c;
            while ((c = getchar()) != '\n' && c != EOF) {}
            done = (c == EOF);
        }
        else if (1 == selection) {
            printf("You chose login\n");
        }
        else if (2 == selection) {
            printf("You chose register\n");
        }
        else if (3 == selection) {
            printf("You chose account\n");
        }
        else if (4 == selection) {
            done = true;
        }
        else {
            printf("Please pick a number between 1 and 4\n");
        }
    }
}

在格式字符串scanf("%d",&slct);就是%d这意味着你想读的数字。

当您输入数字以外的其他内容时,scanf返回 0 表示读取了零个数字。

如果 scanf 在尝试读取输入时遇到文件结尾(输入 control-D),则它返回特殊值 EOF。

此外, scanf 不会消耗不正确的输入,因此您需要明确刷新它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么用getchar()接受输入会陷入无限循环?

为什么使用free()导致无限循环

为什么这会导致无限循环[SICP]?

为什么会导致无限循环?

Java:从数组中获取字符输入会导致无限循环

为什么无限循环不递增整数?

为什么带有GCC的x86上的整数溢出会导致无限循环?

为什么使用无限for循环将无符号整数相加会导致错误的结果?

为什么通过scanf()输入意外的值类型会导致该程序进入无限循环

为什么此代码在“ |”时导致无限循环 用C ++输入?

为什么导致给定程序缓冲区溢出的输入会导致分段错误?

为什么这个while循环会导致无限循环?

输入字符导致无限循环

为什么 useFetcher 会导致重新渲染无限循环?

为什么这个 setState 会导致无限循环?

Python,为什么i = + 1不会导致无限循环?

为什么可选的快速枚举会导致无限循环?

为什么不重定向会导致无限循环?

为什么这段代码会导致无限循环

为什么`data`导致无限循环而`newtype`不是

为什么此方法会导致无限循环?

为什么facebook javascript登录代码会导致无限循环?

为什么这段代码会导致无限循环?

为什么setState导致我的React应用进入无限循环?

为什么这会导致字符无限循环而不是双倍?

为什么无限循环?

无限循环。为什么?

为什么是for(;;); 无限循环?

为什么循环是无限的?