我不能为我的生活弄清楚为什么C忽略了我的if语句。
当输入为-1000时,我试图跳过while语句中的所有过程(因此在退出程序之前它不打印)。这是我的代码:
int main()
{
int count = 1;
int grade1;
int grade2;
double sum;
double average;
printf("Please input a number of grades: \n");
scanf("%d", &grade1);
printf("Sum is: %d.000000 \n", grade1);
printf("Average is: %d.000000 \n", grade1);
count++;
sum = grade1;
while(grade2 != -1000)
{
if(grade2 != -1000)
{
scanf("%d", &grade2);
sum = sum + grade2;
average = sum / count;
printf("Sum is: %lf \n", sum);
printf("Average is: %lf \n", average);
grade1 = sum; //Converting the sum back into an int
count++;
}
}
return 0;
}
这是我输出图像的链接。如您所见,即使level2被赋予-1000,if语句也会被忽略,并且在程序退出之前会在屏幕上打印另外2行。我怎样才能解决这个问题?这对C的工作方式有点奇怪吗?
答案 0 :(得分:5)
第一次执行此操作时
while(grade2 != -1000)
变量grade2
未初始化。
因此,您的代码具有未定义的行为
确保将其初始化为:
int grade2 = 0; // To zero or whatever you want
此外 - 始终检查scanf
返回的值。而不是
scanf("%d", &grade1);
DO
if (scanf("%d", &grade1) != 1)
{
// Add error handling here
}
您的下一个问题是,在检查是否为-1000之前,您不会扫描grade2
。在if语句之前移动扫描。
也许您想要做的是:
int grade2 = 0;
while(grade2 != -1000)
{
if (scanf("%d", &grade2) != 1)
{
// Add error handling here
}
if(grade2 != -1000)
{
...
以便在执行grade2
之前扫描第一个if(grade2 != -1000)
并输入计算代码
不同的写法可能是:
while(1)
{
if (scanf("%d", &grade2) != 1)
{
// Add error handling here
}
if(grade2 == -1000) break; // Terminate the while
sum = sum + grade2;
....
答案 1 :(得分:2)
虽然应该初始化grade2并且应该检查scanf()的返回,但这不是海报遇到的主要问题。问题是他检查了
if(grade2 != -1000)
他已经处理了2年级。他应该移动
scanf("%d", &grade1);
前
if(grade2 != -1000)
答案 2 :(得分:0)
if
循环中的while
语句是多余的,因为循环不会迭代,除非控制它的条件为真,并且if
语句在此之后直接出现,检查对于相同的条件,grade2
是未加盖的。
相反,您需要在scanf()
调用之后移动它,因为这将修改变量grade2
,并且不要忘记在使用它们之前初始化变量,否则您将有未定义行为。
int main(void)
{
//....
int grade2 = 0; // initialized...
//....
while (grade2 != -1000)
{
scanf("%d", &grade2);
if (grade2 != -1000)
{
sum = sum + grade2;
average = sum / count;
printf("Sum is: %lf \n", sum);
printf("Average is: %lf \n", average);
grade1 = sum; //Converting the sum back into an int
count++;
}
}
}