2013-05-17 85 views
-5

輸入說明:如何解決這個代碼?

您的程序將在一個或多個測試用例上測試。每個測試用例都由一個正數組成(0 < n0 < 1,000,000)。

輸入文件的最後一行有一個零

我剛纔輸入這樣的代碼(不是測試案例的一部分。):

int main() 
{ 
    int n0; 

    while((scanf("%d", &n0)) != 0) 
    { 
    .......... 
    } 

但爲什麼當輸入0仍然處理?

+5

你的頭銜非常糟糕。 – Maroun

+1

這太不可思議了。 – SubSevn

+1

'scanf'返回成功轉換的次數。你需要檢查'n0'的值。 –

回答

1
while (1) { 
    scanf("%d", &n0); 
    if (n0==0) break; 
    ... 
} 
+0

謝謝,這是工作.. –

+0

然後你應該使用接受按鈕。歡迎來到stackoverflow! – jakber

1

0仍然被處理,因爲scanf的返回值是它填充的項目數。在輸入文件結尾爲0的情況下,它將返回1 - 不爲零。

您想要檢測您的值是否爲零,然後跳出循環。

+0

好的,謝謝。不明白:) –

0

這是一個使用C很少記住的操作符之一,「,」或排序操作符的理想場所。這是你的代碼重寫,使這使用:

#include <stdio.h> 

int main() 
    { 
    char *str[] = { "123", "456", "789", "0" }; 
    int i = 0; 
    int n0; 
    int scanret; 

    while((scanret = sscanf(str[i], "%d", &n0)), n0 != 0) 
    { 
    printf("i = %d n0 = %d scanret = %d\n", i, n0, scanret); 
    i += 1; 
    } 

    printf("i = %d n0 = %d scanret = %d after loop termination\n", i, n0, scanret); 
    } 

看看爲while循環的條件。這裏發生的是sscanf首先被評估,然後測試n0 != 0被評估。請注意,這不是「或」或「或」運算符(如可以通過檢查下面的示例輸出來確定) - 執行sscanf,然後使用n0 != 0的結果作爲while循環的測試,因爲while使用在其條件中評估的最後一個表達式的值作爲條件的值。

如果你運行這個你會得到類似的輸出:

i = 0 n0 = 123 scanret = 1 
i = 1 n0 = 456 scanret = 1 
i = 2 n0 = 789 scanret = 1 
i = 3 n0 = 0 scanret = 1 after loop termination 

分享和享受。

相關問題