2013-02-20 57 views
-1

所以再次我学习新的编程语言这一次却是C. 而对于我的主菜单创建此功能后,它似乎是在宣告双“当量“,等同的缩写,不正确地输出分配的等价物。我评论了它发现bug的部分。双声明没有什么是分配给它的C语言编程输出

下面是该函数的代码:

// function for grading system 
void gradeSys() 
{ 
    char response; 
    // declaration for computing midterm grades 
    double Mquiz1 = 0, Mquiz2 = 0, Mquiz3 = 0, Mrecit = 0, Massign = 0, MAve = 0, Midex = 0; 

    // declaration for computing final grades 
    double Fquiz1 = 0, Fquiz2 = 0, Fquiz3 = 0, Frecit = 0, Fassign = 0, FAve = 0, Finex = 0; 

    char answer; 
    int counter = 1; 
    // while loop 
    while(counter != 0) { 

    /*!!!---Midterm Grades Input---!!!*/ 
    printf("Welcome to your Grading System.\n"); 
    printf("Please enter your grades for Midterm:\n"); 
    printf("M. Quiz1:\n"); 
    scanf("%d" , &Mquiz1); 
    printf("M. Quiz2:\n"); 
    scanf("%d" , &Mquiz2); 
    printf("M. Quiz3:\n"); 
    scanf("%d" , &Mquiz3); 
    printf("M. Recitation\n"); 
    scanf("%d" , &Mrecit); 
    printf("M. Assignment\n"); 
    scanf("%d" , &Massign); 
    printf("M. Exam:\n"); 
    scanf("%d" , &Midex); 
    // formula for computing midterm grades 
    double Midgrade = 0; 
    MAve = (Mquiz1 + Mquiz2 + Mquiz3 + Mrecit + Massign)/5; 
    double MAveTotal = MAve * .60; 
    double MidExAve = Midex * .40; 
    Midgrade = MAveTotal + MidExAve; 

    printf("Your Midterm average is: %d\n", MAve); 
    printf("Your Midterm Grade is: %d\n", Midgrade); 
    printf("Please press enter to continue...\n"); 
    getchar(); 
    getchar(); 
    system("cls"); 

    /*!!!---Final Grades Input---!!!*/ 
    printf("Please enter your grades for Finals:\n"); 
    printf("F. Quiz1:\n"); 
    scanf("%d" , &Fquiz1); 
    printf("F. Quiz2:\n"); 
    scanf("%d" , &Fquiz2); 
    printf("F. Quiz3:\n"); 
    scanf("%d" , &Fquiz3); 
    printf("F. Recitation\n"); 
    scanf("%d" , &Frecit); 
    printf("F. Assignment\n"); 
    scanf("%d" , &Fassign); 
    printf("F. Exam:\n"); 
    scanf("%d" , &Finex); 
    // formula for computing final grades 
    double Fingrade = 0; 
    FAve = (Fquiz1 + Fquiz2 + Fquiz3 + Frecit + Fassign)/5; 
    double FAveTotal = FAve * .60; 
    double FinExAve = Finex * .40; 
    Fingrade = FAveTotal + FinExAve; 

    printf("Your Final average is: %d\n", FAve); 
    printf("Your Final Grade is: %d\n", Fingrade); 
    printf("Please press enter to continue...\n"); 
    getchar(); 
    getchar(); 
    /*!!!--- Here is where the bug occurs ---!!!*/ 
    // declaration and formula for the term grade 
    double termGrade = 0, equiv; 
    termGrade = (Midgrade + Fingrade)/2; 
    // decision formula for determining equivalent 
    if(termGrade >= 90 && termGrade <= 100) 
    { 
     equiv = 4.0; 
    } 
    else if(termGrade >= 85 && termGrade <= 89) 
    { 
     equiv = 3.0; 
    } 
    else if(termGrade >= 75 && termGrade <= 84) 
    { 
     equiv = 2.0; 
    } 
    else if(termGrade >= 70 && termGrade <= 74) 
    { 
     equiv = 1.0; 
    } 
    else if(termGrade >= 00 && termGrade <= 69) 
    { 
     equiv = 0.0; 
    } 
    else 
    { 
     printf("Invalid grade. Try again.\n"); 
    } 
    // displays the ovarall grade for the term and the equivalent 
    printf("Your grade for this term is: %d. Which is equivalent to a: %d.\n", termGrade, equiv); 
    getchar(); 
    system("cls"); 

    // try again? 
     printf("Do you want to try again:[Y/N]\n"); 
     scanf("%c", &answer); 

     if(answer == 'y' || answer == 'Y') 
     { 
      system("cls"); 
      continue;    
     } 
     else if(answer == 'n' || answer == 'N') 
     { 
      system("cls"); 
      counter = 0; 
     } 
     else 
     { 
      printf("Invalid input\n"); 
     } 

    } 

} 
+0

你不能'printf'双用'%D'。 – DCoder 2013-02-20 06:42:17

+0

谢谢!像迈克尔说的那样将它改为%f,但现在它不会从我的if语句中选择要分配给“equiv”的值。 – Coolai 2013-02-20 06:50:37

+0

同样适用于'scanf' ...你也不能使用'%d'读取一个double。学习如何使用调试器,逐行执行程序,它会比这更快。 – DCoder 2013-02-20 07:02:11

回答

0

%d格式适用于有符号整数。对于浮点数(例如double),您应该使用%f。请参阅http://www.cplusplus.com/reference/cstdio/printf/

或者,您可以将值转换为整数(例如(int)FAve)并使用%d(如果要仅打印整个值的部分)。

+0

感谢您的快速响应!将它更改为%f就像你说的那样,它工作正常,它现在输出一个double,但它不会选择在if语句中输出的内容。它只输出一串双数字(0.00000)。 – Coolai 2013-02-20 06:52:31

+0

“不选”是什么意思? “MidGrade”和“Fingrade”的价值是什么? – Michael 2013-02-20 06:54:08

+0

嗯,其实我没有在显示我的Midgrade和Fingrade时出错。错误在if if语句中。 如果条件满足,我将条件等级分配给条件,假设条件等级为4.0至0.0。但我认为它不会去控制语句,只输出一个0.00000。 – Coolai 2013-02-20 06:55:40