2017-08-05 126 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);