我有一个问题,我试着写一个程序来显示从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;
}
答案 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;
}