2013-06-24 114 views
1
int a; 
scanf("%d",&a); 

我怎樣才能確保代碼不會工作,如果一個非數字字符作爲輸入scanf()聲明? [我需要一個解決方案並不讓我改變數據類型char]驗證輸入整數

+1

通過讀取scanf函數的文檔,並利用返回值。簡單! – enhzflep

+0

謝謝!返回值完成了這項工作。 – amulous

回答

2

如果第一個字符是不是一個數字,然後%d將無法​​匹配,並且a不會分配。 scanf的返回值告訴你分配了多少項目。如果是一個,那麼顯然它至少是部分有效的數字。如果它爲零,這意味着它不能被解析爲數字,並且您可能想要發出錯誤信號。

+0

謝謝!終於明白這一點。 – amulous

2

scanf返回代碼會告訴你你的參數列表中有多少項被填充。這可能還不是你想要的:我認爲你會發現輸入「123four」仍然會返回1,其中a = 123。

0

您可以使用一個do while循環從用戶 比如驗證輸入:

int read,a; 
do { 
     read = scanf("%c", &a); 
    }while(read != EOF && a != '\n'); //change validation here according to condition