2015-12-22 54 views
1

当我有关scanf()虽然使用多个scanf()的它跳过scanf()的其余

它只是跳过第二,第三和之后的任何其他scanf()输入一个值。

这是我的代码:

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    float manyTest, gr1, gr2, gr3, gr4, gr5, gr6, gr7, gr8; 
    manyTest = gr1 = gr2 = gr3 = gr4 = gr5 = gr6 = gr7 = gr8 = 0; 

    printf("How many tests you wanna average? (Minimum 1 Maximum 8)\n"); 
    scanf(" %f", &manyTest); 

    if (manyTest <= 0) { 
     printf("The Minimum is 1!\n");  
    } else 
    if (manyTest > 8) { 
     printf("The Maximum is 8!\n"); 
    } else { 
     if (manyTest = 1) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
     } else 
     if (manyTest = 2) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
     } else 
     if (manyTest = 3) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr3);  
     } else 
     if (manyTest = 4) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr3); 
      scanf(" %f", &gr4); 
     } else 
     if (manyTest = 5) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr3); 
      scanf(" %f", &gr4); 
      scanf(" %f", &gr5); 
     } else 
     if (manyTest = 6) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr3); 
      scanf(" %f", &gr4); 
      scanf(" %f", &gr5); 
      scanf(" %f", &gr6); 
     } else 
     if (manyTest = 7) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr3); 
      scanf(" %f", &gr4); 
      scanf(" %f", &gr5); 
      scanf(" %f", &gr6); 
      scanf(" %f", &gr7); 
     } else 
     if (manyTest = 8) { 
      printf("Write down your grades on those tests:\n"); 
      scanf(" %f", &gr1); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr2); 
      scanf(" %f", &gr4); 
      scanf(" %f", &gr5); 
      scanf(" %f", &gr6); 
      scanf(" %f", &gr7); 
      scanf(" %f", &gr8); 
     } 
     float avg = (gr1 + gr2 + gr3 + gr4 + gr5 + gr6 + gr7 + gr8)/manyTest; 
     printf("Your average grade is: %.2f\n", avg); 
    } 
    system("pause"); 
    return 0; 
} 

什么是错我的代码,它跳过scanf()的休息吗? 我想要的代码是询问他们想要测试多少次,然后取这个数字(在1到8之间),然后进行测试,然后平均分数。

让说:

How many test...? 
2 
Write down your grades: 
100 
90 
Your average grade is: 95.00 

,但它确实是:

How many test.....? 
2 
Write down your grades: 
90 
Your average is: 90.00 

,甚至不让它到另一个变量的信息。

+0

为什么在它们每个中的'%f'之前的空格?删除它们。 – ameyCU

+0

为什么不使用数组和循环? –

+0

另外,您需要了解赋值('=')和比较等号('==')之间的区别。 –

回答

2

其实,在你的代码,罪魁祸首是不是scanf但这些wrong方程

else if (manyTest = 8) //WROOOOONNGGGG!! =(=(=(=(

,而不是把双等号...

else if (manyTest == 8) //correct! =) 

因为你真正想要的是比较

+0

谢谢!有效! – kuyy

+0

太好了。 ;) 很高兴听你这样说。你可能还想了解'array','for-loop'迭代和'switch-case'块,以使你的代码看起来更漂亮......;)不知道老师现在需要什么... – Ian

1

问题是,下面的语句将永远匹配第一个if。

首先您需要使用==进行比较,因为使用=只是将其作为赋值。

其次,分配manyTest = 1将始终评估为true,因为它是如何工作的。所以当你到达if (manyTest = 1)的条件将是真实的,所以你会进入第一个案件,只有一个scanf。你永远不会达到其他if语句并测试这些条件。

if (manyTest = 1) { 
    printf("Write down your grades on those tests:\n"); 
    scanf(" %f", &gr1); 
} 
else if (manyTest = 2) { 
    printf("Write down your grades on those tests:\n"); 
    scanf(" %f", &gr1); 
    scanf(" %f", &gr2); 
} 
... 

在将来调试时东西,你可以在printf中使用不同的文本在每个if语句,以更好地了解事情出错。

0

。在你的代码中的错误经典:

您使用赋值操作符=,而不是在测试中的比较操作==。 C非常灵活:它允许在测试表达式中进行赋值,这会导致您遇到的经典错误。你被咬了一次,所以现在你知道你应该输入什么。任何人都可以犯一个错字,有一个非常有效的方法来防止这个问题:编译时启用警告(例如:gcc -Wall -Wextra -Werror)。