【问题标题】:The invalid choice in the code appears in the output screen代码中的无效选择出现在输出屏幕中
【发布时间】:2015-05-23 02:34:25
【问题描述】:

为什么“无效”出现在我的输出中的所有内容下?无效的选择是菜单中的最后一件事,我使用的语句是正确的还是到底有什么问题?

#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);
}

【问题讨论】:

  • 基本上是这样的:-
  • else if (c=!7); { { printf("\n无效"); }

标签: c


【解决方案1】:

问题来了

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");
}

使您的代码更具可读性。

【讨论】:

    【解决方案2】:

    要了解问题,请考虑如果用户输入 2 会发生什么。第一个if 语句评估为真,然后调用two_assesments 函数。接下来的三个if 语句失败。然后我们到达if (c==6)。这也失败了,因此评估了 else。这里有两个问题。

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

        if (c==6) {
            six_assesments();
        }
        else {
            if (c=!7)
                ; /* do nothing */
        }
        printf("\nInvalid");
    

    换句话说,由于分号,最后的if 语句无效,printf 甚至不是else 的一部分。所以“无效”总是被打印出来。

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

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

        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");
    

    【讨论】:

      猜你喜欢
      • 2022-06-13
      • 2020-03-05
      • 2019-01-31
      • 2021-08-13
      • 2013-08-01
      • 2021-12-18
      • 2019-12-12
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多