如果语句没有被捕获
If statement isn't being caught
我一辈子都弄不明白为什么 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;
}
这是我的输出图像的 link。如您所见,即使 grade2 被赋予 -1000,if 语句也会被忽略,并且在程序退出之前会在屏幕上打印另外 2 行。我怎样才能解决这个问题?这是 C 工作方式的某种奇怪之处吗?
当你第一次这样做时
while(grade2 != -1000)
变量grade2
未初始化。
因此您的代码具有未定义的行为
确保像这样初始化它:
int grade2 = 0; // To zero or whatever you want
此外 - 始终检查 scanf
返回的值。所以而不是
scanf("%d", &grade1);
做
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)
{
...
以便您在执行 if(grade2 != -1000)
之前扫描第一个 grade2
并输入计算代码
不同的写法可能是:
while(1)
{
if (scanf("%d", &grade2) != 1)
{
// Add error handling here
}
if(grade2 == -1000) break; // Terminate the while
sum = sum + grade2;
....
虽然确实应该初始化 grade2 并且应该检查 scanf() 的 return,但这不是张贴者 运行 遇到的主要问题。问题是他检查
if(grade2 != -1000)
在他已经处理完 grade2 之后。他应该搬家
scanf("%d", &grade1);
之前
if(grade2 != -1000)
while
循环中的 if
语句是多余的,因为除非控制它的条件为真,否则循环不会迭代,并且 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++;
}
}
}
我一辈子都弄不明白为什么 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;
}
这是我的输出图像的 link。如您所见,即使 grade2 被赋予 -1000,if 语句也会被忽略,并且在程序退出之前会在屏幕上打印另外 2 行。我怎样才能解决这个问题?这是 C 工作方式的某种奇怪之处吗?
当你第一次这样做时
while(grade2 != -1000)
变量grade2
未初始化。
因此您的代码具有未定义的行为
确保像这样初始化它:
int grade2 = 0; // To zero or whatever you want
此外 - 始终检查 scanf
返回的值。所以而不是
scanf("%d", &grade1);
做
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)
{
...
以便您在执行 if(grade2 != -1000)
之前扫描第一个 grade2
并输入计算代码
不同的写法可能是:
while(1)
{
if (scanf("%d", &grade2) != 1)
{
// Add error handling here
}
if(grade2 == -1000) break; // Terminate the while
sum = sum + grade2;
....
虽然确实应该初始化 grade2 并且应该检查 scanf() 的 return,但这不是张贴者 运行 遇到的主要问题。问题是他检查
if(grade2 != -1000)
在他已经处理完 grade2 之后。他应该搬家
scanf("%d", &grade1);
之前
if(grade2 != -1000)
while
循环中的 if
语句是多余的,因为除非控制它的条件为真,否则循环不会迭代,并且 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++;
}
}
}