首页 > 解决方案 > 如果用户输入了非整数,如何重新请求用户输入

问题描述

如何不断重新要求用户输入有效的整数输入?我知道如何验证整数范围输入,但是当提示在 C 中输入整数时,我不知道如何验证非整数输入。

#include <stdio.h>

int main() {
    int menu;
    while(true) {
        printf("Choose a menu (1-4):\n");
        do {
            scanf("%d", &menu);
        } while(menu < 1 || menu > 4);
        if(menu == 1) {
            printf("menu 1\n");
        } else if(menu == 2) {
            printf("menu 2\n");
        } else if(menu == 3) {
            printf("menu 3\n");
        } else if(menu == 4) {
            printf("menu 4, exit\n");
            break;
        }
    }
    return 0;
}

任何帮助将不胜感激,如果这是重复的,我很抱歉,因为每次我尝试搜索解决方案时,它使用另一种语言,或者线程询问“如何验证整数输入范围”而不是非整数输入。

标签: cvalidationinput

解决方案


如果您想知道用户何时给出了非整数输入,一种方法如下:

char number; /* assuming you'll only need numbers 0-9 */
int menu;

while (true)
{
  scanf("%c",&number);
  if (number >= '0' && number <= '9')
     break;
  else
     printf("The input is not an integer\n");
 }

menu = number - '0' ;
/* write rest of the code here */

如果输入是 1 - 999,你可以使用这个:

char *s = malloc(sizeof(char)*4);

while (true)
{
  scanf("%s", s);
  is_int = true;
  menu = 0;
  if (s[3] != '\0')
  {
    printf("integer bigger than 999 not allowed, input again\n");
    continue;
  }
  for (int itr = 0; s[itr] != '\0'; itr++)
    if (s[itr] >= '0' && s[itr] <= '9')
    {
      menu = menu*10 + s[itr]-'0';
    }
    else
    {
      is_int = false;
      printf("not a valid integer, input again\n");
      break;
    }

  if (is_int && menu != 0)
  break;
}

推荐阅读