2017-08-05 130 views
0

我正在为我的开关盒编写代码。我正在接受用户的输入并根据输入打印相应的日期。但我的问题是,如果用户正在给字符串输入它打印情况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 
+1

'INT天;' - >'INT天= -1;' – BLUEPIXY

+7

例如什么@BLUEPIXY说,但我会建议使用** 'scanf()'的返回值**告诉你成功执行了多少次转换。你期望'1',但是如果输入不能被解析成数字,你会得到'0'(如果有'EOF'或者错误,你会得到'EOF')。始终检查可返回错误指示的函数的返回值! –

回答

3

scanf不会修改你的int如果格式说明符没有在输入中找到。

在这种情况下,您的switch在未初始化的int上。做什么与未初始化的POD类型通常是A Bad Thing™,所以你应该小心,你的值是正确初始化。

在这种情况下,因为您希望它触发default分支,因此初始化为int days = -1;(或者不是[0,6]中的任何内容)应该可以做到这一点。

PS:请注意,scanf也会返回一个int,告诉您有多少个参数成功找到。这意味着您可以检查scanf是否返回0EOF并单独处理这种情况 - 例如更具描述性的错误消息。

0

循环,直到days被正确扫描

while(scanf("%d",&days) != 1) getc(stdin);