开关盒和用户输入字符串的整数输入
问题描述:
我正在为我的开关盒编写代码。我正在接受用户的输入并根据输入打印相应的日期。但我的问题是,如果用户正在给字符串输入它打印情况0语句作为输出。任何人都可以请纠正这个程序?开关盒和用户输入字符串的整数输入
#include<stdio.h>
int main(void){
int days;
scanf("%d",&days);
switch(days){
case 0: printf("Mon");break;
case 1: printf("Tue");break;
case 2: printf("Wed");break;
case 3: printf("Thu");break;
case 4: printf("Fri");break;
case 5: printf("Sat");break;
case 6: printf("Sun");break;
default: printf("Plz enter a valid day(0-6) :(");
}
return 0;
}
我的输出打印:
>>a.out
Naveen
mon
答
scanf
不会修改你的int
如果格式说明符没有在输入中找到。
在这种情况下,您的switch
在未初始化的int
上。做什么与未初始化的POD类型通常是A Bad Thing™,所以你应该小心,你的值是正确初始化。
在这种情况下,因为您希望它触发default
分支,因此初始化为int days = -1;
(或者不是[0,6]
中的任何内容)应该可以做到这一点。
PS:请注意,scanf
也会返回一个int
,告诉您有多少个参数成功找到。这意味着您可以检查scanf
是否返回0
或EOF
并单独处理这种情况 - 例如更具描述性的错误消息。
答
循环,直到days
被正确扫描
while(scanf("%d",&days) != 1) getc(stdin);
'INT天;' - >'INT天= -1;' – BLUEPIXY
例如什么@BLUEPIXY说,但我会建议使用** 'scanf()'的返回值**告诉你成功执行了多少次转换。你期望'1',但是如果输入不能被解析成数字,你会得到'0'(如果有'EOF'或者错误,你会得到'EOF')。始终检查可返回错误指示的函数的返回值! –