如何不断要求用户输入一个有效的整数输入?我知道如何验证整数范围输入,但当提示在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 1n");
} else if(menu == 2) {
printf("menu 2n");
} else if(menu == 3) {
printf("menu 3n");
} else if(menu == 4) {
printf("menu 4, exitn");
break;
}
}
return 0;
}
如果这是重复的,我们将不胜感激,我很抱歉,因为每次我尝试搜索解决方案时,都是在另一种语言上,或者线程正在询问"如何验证整数输入范围"而不是非整数输入。
如果您想知道用户何时给出了非整数输入,可以采用如下方法:
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 integern");
}
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] != ' ')
{
printf("integer bigger than 999 not allowed, input againn");
continue;
}
for (int itr = 0; s[itr] != ' '; itr++)
if (s[itr] >= '0' && s[itr] <= '9')
{
menu = menu*10 + s[itr]-'0';
}
else
{
is_int = false;
printf("not a valid integer, input againn");
break;
}
if (is_int && menu != 0)
break;
}
将输入与解析分离。
考虑一个辅助函数。使用fgets()
进行读取,然后进行解析。
// return 0 on success, EOF on end of file
int read_int(const char *prompt, int min, int max, &val) {
#define LINE_N 100
while (1) {
fputs(prompt, stdout);
fflush(stdout);
char buf[LINE_N];
if (fgets(buf, sizeof buf, stdin) == NULL) {
return EOF;
}
char *endptr;
errno = 0;
long val = strtol(buf, &endptr, 0);
// Validate an integer was read and if it is in range
if (endptr > buf && errno==0 && val >= min && val <= max) {
return (int) val;
}
}
}
使用
int menu;
if (get_int("Choose a menu (1-4):n", 1, 4, &menu) == EOF) {
printf("Input closedn");
return 0;
}
if(menu == 1) {
...