C 代码中的无效选项出现在输出屏幕中

C 代码中的无效选项出现在输出屏幕中,c,C,为什么“无效”出现在我的输出中的“所有”下?无效选项是菜单中的最后一项,我使用的语句是正确的还是错误的 #include <stdio.h> void two_assesments(); void three_assesments(); void four_assesments(); void five_assesments(); void six_assesments(); int main( void ) { int c; printf("\n*****St

为什么“无效”出现在我的输出中的“所有”下?无效选项是菜单中的最后一项,我使用的语句是正确的还是错误的

#include <stdio.h>

void two_assesments();
void three_assesments();
void four_assesments();
void five_assesments();
void six_assesments();

int main( void )
{
    int c;

    printf("\n*****Student Grade Calculator*****\n\n");
    printf(" Developed By...\n");
    printf(" Carlos\n");
    printf(" University of South Wales\n");
    printf(" =================================================================\n");
    printf("\n");

    printf("\n Please enter the number of assessments in the module : \n");
    scanf("%d",&c);

    if (c==2) {
        two_assesments();
    }
    if (c==3) {
        three_assesments();
    }
    if (c==4) {
        four_assesments();
    }
    if (c==5) {
        five_assesments();
    }
    if (c==6) {
        six_assesments();
    }
    else
        if (c=!7); {
            { printf("\nInvalid"); }
        }

    return(0);
}
#包括
作废两项评估();
撤销三项评估();
作废四项评估();
作废五项评估();
作废六项评估();
内部主(空)
{
INTC;
printf(“\n*******学生成绩计算器******\n\n”);
printf(“由……开发”);
printf(“Carlos\n”);
PrPTF(南威尔士大学);
printf(“=====================================================================================\n”);
printf(“\n”);
printf(“\n请在模块中输入评估次数:\n”);
scanf(“%d”、&c);
如果(c==2){
两项评估();
}
如果(c==3){
三项评估();
}
如果(c==4){
四项评估();
}
如果(c==5){
五项评估();
}
如果(c==6){
六项评估();
}
其他的
如果(c=!7){
{printf(“\n无效”);}
}
返回(0);
}
问题就在这里

else
    if (c=!7); { . . .
你有一个
if()之后

我建议您使用这样的
switch
语句

switch (c) {
  case 2:   two_assesments(); break;
  case 3: three_assesments(); break;
  case 4:  four_assesments(); break;
  case 5:  five_assesments(); break;
  case 6:   six_assesments(); break;
  default: printf("\nInvalid\n");
}
    if (c==2)
        two_assesments();
    else if (c==3)
        three_assesments();
    else if (c==4)
        four_assesments();
    else if (c==5)
        five_assesments();
    else if (c==6)
        six_assesments();
    else
        printf("\nInvalid");

<> >使代码更可读。

理解问题,考虑如果用户输入<代码> 2 < /代码>会发生什么。第一个
if
语句的计算结果为true,并调用
two\u assessment
函数。接下来的三个
if
语句失败。然后我们得到
如果(c==6)
。这也会失败,因此将对
else
进行评估。这里有两个问题

首先是分号。因为在
if(c=!7)
后面有一个分号,编译器会将代码视为

    if (c==6) {
        six_assesments();
    }
    else {
        if (c=!7)
            ; /* do nothing */
    }
    printf("\nInvalid");
换句话说,由于分号的存在,最后的
if
语句无效,
printf
甚至不是
else
的一部分。所以“无效”总是被打印出来

另一个问题是
=。你的意思是如果(c!=7)
。通过反转
=
,您实际上将
0
分配给
c
,而
if
的计算结果始终为false。编译器应该就此向您发出警告

稍微改进的代码版本如下所示

switch (c) {
  case 2:   two_assesments(); break;
  case 3: three_assesments(); break;
  case 4:  four_assesments(); break;
  case 5:  five_assesments(); break;
  case 6:   six_assesments(); break;
  default: printf("\nInvalid\n");
}
    if (c==2)
        two_assesments();
    else if (c==3)
        three_assesments();
    else if (c==4)
        four_assesments();
    else if (c==5)
        five_assesments();
    else if (c==6)
        six_assesments();
    else
        printf("\nInvalid");

基本上是这样的:-else如果(c=!7);{{printf(“\nInvalid”);}