簡體   English   中英

C跳過“while”循環?

[英]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測試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);
}

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

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM