2014-10-16 217 views
3

我有一個問題,我試圖編寫一個程序來顯示從1到22的整體總和,然後,做2個while循環。第一個應該執行用戶給出的一些數字的總和,例如:輸入10,30和40,然後在輸入0時,程序將前三個數字相加。不幸的是,第一個while循環不起作用。它直接進入最後一個while循環,它應該輸入一個十進制數字(10.20 30.50 40.55),並且在你再次輸入0之後,它將這些數字相加,然後將每一個條目與1.19相加和相乘。到目前爲止,最後一個循環工作正常,不幸的是,第二個循環沒有,如果我把printf和scanf移動到它允許我寫入的時候,但是剛開始寫入時不停止寫入的數字。先謝謝你!C跳過「while」循環?

下面是代碼:

#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; 
} 

回答

1

不要測試bwhile,在用戶輸入數字後進行測試。然後您可以使用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); 
} 
+0

感謝名單了很多,好像,你的答案是什麼林尋找,但我需要顯示所有這些,所以我剛纔添加的bouth數字我的最終SUM而}的整筆新的printf之後,所以無論何時我輸入0,它總結了我之前編寫的所有數字,並給出答案很酷,我也可以在一段時間內完成一個printf,所以它會顯示每一次你已經寫好的數字的總和,謝謝再次:) – DavidsAmause 2014-10-16 16:23:03

5

你不進入循環前初始化i爲任意值

while(i != 0) 

i很可能是零,在這一點上,讓你的循環將不會被輸入一次。初始化i爲非零值應該可以解決這個特定的問題。變量b也是如此。

您應該在編譯器中打開警告,以便它可以向您顯示像這樣的問題。

2

第一次評估第二次條件時,b有未定義的值,因爲它沒有被初始化。第三次同樣適用。

是否執行兩個循環只是一個機會問題。

使用非零值初始化這兩個變量,以確保兩個時間段都進入。或者使用do-while:

do { 

    printf("type a number:"); 
    scanf("%i", &b); 
    sum += b; 
    printf("%i\n", b); 

} while (b != 0); 
0

您唯一的問題是初始化:請參閱下面的代碼中的編輯。 (它編譯並運行)
你有沒有得到任何編譯器警告這些?如果沒有,你應該改變你的設置。

#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; 
}