C跳过"而#34;环?

时间:2014-10-16 15:34:54

标签: c 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;
}

4 个答案:

答案 0 :(得分:5)

在使用

进入循环之前,不要将i初始化为任何值
while(i != 0)
此时

i很可能为零,因此您的循环甚至不会被输入一次。将i初始化为非零值应解决此特定问题。变量b也是如此。

您应该在编译器中打开警告,这样就可以向您显示这样的问题。

答案 1 :(得分:2)

第一次评估第二次while的条件时,b具有未定义的值,因为它未初始化。这同样适用于第三种情况。

两个循环是否都被执行只是一个偶然的问题。

使用非零值初始化两个变量以确保两个输入都进入。或者使用do-while:

do {

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

} while (b != 0);

答案 2 :(得分:1)

不要使用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);
}

答案 3 :(得分: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;
}