2015-07-10 79 views
1

当我运行我的程序时,它会询问命令,当您键入a,b或c时,它会提示您根据您选择的值给出该字母。列出的任何其他命令显示统计信息我的小问题是,当我在一个有效的命令类型,我的“无效的命令”的警告弹出,即使它的工作原理代码运行,但表示无效

#include <stdio.h> 

int main(void) 
{ 
    double a = 0; 
    double b = 0; 
    double c = 0; 
    double d = 0; 
    double e = 0; 
    double f = 0; 
    double g = 0; 
    double h = 0; 
    double i = 0; 

    char command = '\0'; 

    printf("\n  Welcome\n"); 
    printf("  Aquapodz Stress Analysis Program\n"); 
    printf(" ==================================\n"); 
    while (command != 'x'); 
    { 
     printf("\n\n(a), (b), or (c), enter trial data for  vendor.\n(f)ail-rate,  (m)ean stress, (s)ummary, e(x)it\n"); 
     printf("Please enter a command"); 
     scanf("%c", &command); 

     if (command == 'a') 
     { 
     printf("Please enter stress values (GPa) for this trial."); 
     scanf("%lf", &a); 
     scanf("%lf", &b); 
     scanf("%lf", &c); 
     } 
     else if (command == 'b') 
     { 
     printf("Please enter stress values (GPa) for this trial."); 
     scanf("%lf", &d); 
     scanf("%lf", &e); 
     scanf("%lf", &f); 
     } 
     else if (command == 'c') 
     { 
     printf("Please enter stress values (GPa) for this trial."); 
     scanf("%lf", &g); 
     scanf("%lf", &h); 
     scanf("%lf", &i); 
     } 
     else if (command == 'f') 
     { 

     printf("Average failure rate:\nAzuview:%f\nBublon:%f \nCryztal:%f\n",  a+b+c, d+e+f, g+h+i); 
     } 
     else if (command == 'm') 
     { 
     printf("Average mean stress:\nAzuview:%f\nBublon:%f\nCryztal:%f\n",   a+b+c/3, d+e+f/3, g+h+i/3); 
     } 
     else if (command == 's') 
     { 
     print("Total (pass/fail) so far:\nAzuview:%f(%f/0)\nBublon:%f(%f/0)  \nCryztal:%f(%f/0)\n", a+b+c, a+b+c, d+e+f, d+e+f, g+h+i, g+h+i); 
     } 
     else if (command == 'x') 
     { 

     } 
     else 
     { 
     printf("Invalid Command! Please Try Again :)"); 
     } 

    } 
    printf("Goodbye, Please Come Again!"); 
    return 0; 
} 

回答

1
scanf("%c", &command); 

的问题。您最终将前一个电话的剩余换行符读入scanf。使用

scanf(" %c", &command); 
1

当您输入任何值时,还有一个换行符,当您按下回车键时会被输入。由于关你scanf模式匹配的\n,它停留在缓冲区中,被拾起的下一个scanf

所以不是这样的:

scanf("%c", &command); 

这样做:

scanf("%c\n", &command); 

并且在其他地方使用scanf

+0

如果在输入流中留下的换行符来自'scanf(“%lf”,&i);'。 –

+0

'这就是为什么我提到所有'scanf'调用都需要类似的修复。 – dbush

相关问题