2014-10-16 125 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; 
}