有一對夫婦的方式,以避免-1添加到總和中。讓我們先來看看你的代碼:
do
{
printf("Enter a number. Enter -1 to stop\n");
scanf(" %d", &n);
sum = sum + n;
printf("The sum is %d\n", sum);
}
while (n >= 0);
如果n小於零,那麼do/while循環將會退出。這是將-1作爲前哨值的一種方法,因此在那裏沒有問題。
不幸的是,您的代碼讀取數字,將其添加到總數,然後檢查是否應該停止。按照這個順序,你總是在檢查前添加。
最明顯的,暴力的方式來避免增加的數量是增加一個明確的檢查:
do {
printf ... scanf ... ;
if (n != -1)
sum = sum + n;
} while (n >= 0);
另一種方式是作弊。鑑於-1總是在列表的末尾,只是撤消底:
do {
printf... scanf...;
sum = sum + n;
} while (n >= 0);
sum = sum - n; // CHEAT - just subtract out the last number
printf("The sum is %d\n", sum);
最後,還有你可以用一招。有時在這種情況下,你可以「轉移」循環,以便你實際上做的事情有點不合時宜。在這種情況下,您想在添加之前進行測試。因此,把附加在循環的頂部,只是一些事情,從而使第一個添加對人體無害:
n = 0; // X + 0 is X, so adding 0 is harmless.
do {
sum = sum + n;
printf ... scanf ...;
} while (n >= 0);
這可能會讓你不舒服的一分鐘,但它是你會看到一個成語許多。循環代碼已在循環內部「扭曲」,因此「自然」循環的頂部不會從實際循環體的頂部開始。這是一個很好的竅門。
如果您不想添加'-1',則不必添加它。問題是什麼? – Olaf
您對程序進行格式化的方式會使底部花括號中的代碼與while循環相關聯。情況並非如此。另請注意,返回0後出現的printf;永遠不會被執行。 – bruceg
將它全部包裝在一個醜陋的'while'條件下。 printf(「輸入一個數字,輸入-1停止\ n」); (sum =%d \ n「,sum + = n));' – chux