輸入說明:如何解決這個代碼?
您的程序將在一個或多個測試用例上測試。每個測試用例都由一個正數組成(0 < n0 < 1,000,000)。
輸入文件的最後一行有一個零
我剛纔輸入這樣的代碼(不是測試案例的一部分。):
int main()
{
int n0;
while((scanf("%d", &n0)) != 0)
{
..........
}
但爲什麼當輸入0仍然處理?
輸入說明:如何解決這個代碼?
您的程序將在一個或多個測試用例上測試。每個測試用例都由一個正數組成(0 < n0 < 1,000,000)。
輸入文件的最後一行有一個零
我剛纔輸入這樣的代碼(不是測試案例的一部分。):
int main()
{
int n0;
while((scanf("%d", &n0)) != 0)
{
..........
}
但爲什麼當輸入0仍然處理?
while (1) {
scanf("%d", &n0);
if (n0==0) break;
...
}
謝謝,這是工作.. –
然後你應該使用接受按鈕。歡迎來到stackoverflow! – jakber
0仍然被處理,因爲scanf的返回值是它填充的項目數。在輸入文件結尾爲0的情況下,它將返回1 - 不爲零。
您想要檢測您的值是否爲零,然後跳出循環。
好的,謝謝。不明白:) –
這是一個使用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
分享和享受。
你的頭銜非常糟糕。 – Maroun
這太不可思議了。 – SubSevn
'scanf'返回成功轉換的次數。你需要檢查'n0'的值。 –