[英]C skip a “while” loop?
我有一個問題,我試着寫一個程序來顯示從1到22的整個總和,然后,做2個while循環。 第一個應該執行用戶給出的某些數字的總和,例如:輸入10,30和40然后當輸入0時,程序將前三個數字相加。 不幸的是,第一個while循環不起作用。 它直接進入最后一個while循環,它應該鍵入一個十進制數字,如(10.20 30.50 40.55),再次輸入0后,它將這些數字相加,並將每個條目加上和乘以1.19。 到目前為止,最后一個循環工作正常,不幸的是第二個循環沒有,如果我移動printf和scanf,它讓我寫,但只是開始寫,沒有停止我寫的數字。 先感謝您!
這是代碼:
#include <stdio.h>
int main()
{
int sum = 0;
int a;
int b;
double i;
double sum1 = 0;
for (a= 0; a <= 22; a++) {
sum = sum + a;
printf("the sum from 1 till 22 : %i\n ", sum);
}
while (b != 0) {
printf("type a number:");
scanf("%i", &b);
sum += b;
printf("%i\n", b);
}
printf("the sum is : %i\n", sum);
while(i !=0) {
printf ("Type a decimal number:");
scanf ("%lf",&i);
sum1 += i*1.19;
printf("%lf\n", i);
}
printf("The decimal summ is: %lf\n",sum1);
return 0;
}
在進入循環之前,不要將i
初始化為任何值
while(i != 0)
i
可能很好,所以你的循環甚至不會輸入一次。 將i
初始化為非零值應解決此特定問題。 變量b
。
您應該在編譯器中打開警告,這樣就可以向您顯示這樣的問題。
第一次評估第二次while的條件時, b
具有未定義的值,因為它未初始化。 這同樣適用於第三種情況。
兩個循環是否都被執行只是一個偶然的問題。
使用非零值初始化兩個變量以確保兩個輸入都進入。 或者使用do-while:
do {
printf("type a number:");
scanf("%i", &b);
sum += b;
printf("%i\n", b);
} while (b != 0);
不要用while
測試b
, while
用戶輸入數字后進行測試。 然后你可以使用break
來退出循環。
while (1) {
printf("type a number:");
scanf("%i", &b);
if (b == 0) {
break;
}
sum += b;
printf("%i\n", b);
}
while(1) {
printf ("Type a decimal number:");
scanf ("%lf",&i);
if (i == 0.0) {
break;
}
sum1 += i*1.19;
printf("%lf\n", i);
}
您唯一的問題是初始化:請參閱下面的代碼中的編輯。 (它編譯並運行)
你有沒有得到任何編譯器警告? 如果沒有,您應該更改您的設置。
#include <stdio.h>
int main()
{
int sum = 0;
int a;
int b=-1; //initialize (any non-zero value will work)
double i;
double sum1 = 0;
for (a= 0; a <= 22; a++) {//a initialized in for(...) statement, (this is good)
sum = sum + a;
printf("the sum from 1 till 22 : %i\n ", sum);
}
while (b != 0) { //b Needs to be initialized before using (done above)
printf("type a number:");
scanf("%i", &b);
sum += b;
printf("%i\n", b);
}
printf("the sum is : %i\n", sum);
i=-1; //initialize i to any non-zero value
while(i !=0) {
printf ("Type a decimal number:");
scanf ("%lf",&i);
sum1 += i*1.19;
printf("%lf\n", i);
}
printf("The decimal summ is: %lf\n",sum1);
getchar();
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.