2016-09-23 32 views
2
do 
{ 
    printf("minutes: "); 
    scanf("%d", &minutes); 
}while(minutes < 1); 

對於上面的代碼,如果分鐘給出某個字符,那麼分鐘的值爲「2」。 如果先輸入一個負整數,然後再輸入一個字符,則「分鐘:」語句重複無限次。如果字符作爲輸入來代替整數,scanf是如何工作的

我在codeblocks中運行這個程序。爲什麼會發生?

回答

0

在這種情況下它返回0。函數scanf()返回匹配的格式說明符的數量。在這種情況下,沒有匹配,因此它返回0

如果在調用scanf()之前初始化number然後失敗返回0,你用來初始化number值不調用scanf()後更改。

如果您未初始化number,則嘗試讀取值爲未定義的行爲。它將有一個不確定的價值,所以你不能預測它會是什麼樣的價值。

+0

當'scanf()'由於罕見的輸入錯誤而返回'EOF'時,會發生嘗試使用'number'的先前值的弱點。數字的狀態沒有定義。最好使用'scanf()'和朋友的返回值來引導邏輯,而不是先前的值。 – chux

4

scanf("%d",&minutes)不會讀取字符的值。 minutes中的值將保持不變。該字符將保留在緩衝區中,scanf將繼續嘗試讀取並保持失敗。

scanf的返回值將是讀取的元素數量,因此如果您輸入字符並且可用於打破循環,則它將爲0。

do 
{ 
    printf("minutes: "); 
    ret = scanf("%d", &minutes); 
    if (ret != 1) 
    break; 
}while(minutes < 1); 
相關問題