Kin*_*ird -1 c if-statement statements
我不能为我的生活弄清楚为什么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;
}
Run Code Online (Sandbox Code Playgroud)
这是我输出图像的链接.如您所见,即使level2被赋予-1000,if语句也会被忽略,并且在程序退出之前会在屏幕上打印另外2行.我怎样才能解决这个问题?这对C的工作方式有些奇怪吗?
当你第一次这样做时
while(grade2 != -1000)
Run Code Online (Sandbox Code Playgroud)
变量grade2未初始化.
因此,您的代码具有未定义的行为
确保将其初始化为:
int grade2 = 0; // To zero or whatever you want
Run Code Online (Sandbox Code Playgroud)
进一步 - 始终检查返回的值scanf.而不是
scanf("%d", &grade1);
Run Code Online (Sandbox Code Playgroud)
做
if (scanf("%d", &grade1) != 1)
{
// Add error handling here
}
Run Code Online (Sandbox Code Playgroud)
您的下一个问题是grade2在检查它是否为-1000之前不扫描.在if语句之前移动扫描.
也许你想要做的是:
int grade2 = 0;
while(grade2 != -1000)
{
if (scanf("%d", &grade2) != 1)
{
// Add error handling here
}
if(grade2 != -1000)
{
...
Run Code Online (Sandbox Code Playgroud)
这样您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;
....
Run Code Online (Sandbox Code Playgroud)