【发布时间】:2017-12-01 14:33:13
【问题描述】:
我正在制作一个列出选项 1-3 的菜单。用户应该输入一个整数。
scanf("%d", &select_option)
当用户输入一个字符(例如长字符串的“a”或“asd”或“1a2”之类的混合)而不是预期的int时,如何提示错误?谢谢。
注意:当用户输入 'a'、'asd' 之类的 'char' 时,代码会由于某种原因进入无限循环。
这是我的程序(最小示例):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
printf("Favourite sports? \n");
printf("1. Tennis\n");
printf("2. Badminton\n");
printf("3. Basketball\n");
printf("4. Exit program.\n");
printf("Enter your choice (1-4): ");
scanf("%d", &select_option);
while(select_option != 4)
{
switch(select_option)
{
case 1:
printf("You like tennis! Nice! \n");
break;
case 2:
printf("You like badminton! Nice!");
break;
case 3:
printf("You like basketball! Nice!");
break;
default:
system("clear");
printf("Invalid option. Please re-enter your choice (1-4).\n");
}//end switch
printf("Favourite sports? \n");
printf("1. Tennis\n");
printf("2. Badminton\n");
printf("3. Basketball\n");
printf("4. Exit program.\n");
printf("Enter your choice (1-4): ");
scanf("%d", &select_option);
}//end while
}//end main
【问题讨论】:
-
您可能对我的beginners' guide away from scanf() 感兴趣,以了解更多关于
scanf()的所有可能陷阱以及其他使用指南。 -
用
getline获取整行,去掉换行符,用strtol转换成整数,检查是否正常 -
如果用户输入的不是数字,只会抛出错误。例如
if (select_option < '0' && select_option > '9') { printf("error: wrong input\n"); }会尽可能简单。 -
@LinuxStuff 但是当用户输入 'a'、'asd' 之类的 'char' 时,由于某种原因,代码进入了无限循环。
-
试试这个sn-p的代码。
if ((select_option > 0) && (select_option <= 9)) { printf("you have entered %d\n", select_option); } else { printf("you have entered wrong menu option\n"); }这是处理输入的最简单方法。
标签: c validation io switch-statement scanf