If-else语句没有';我不能在C工作 #包括 void main() { //声明 煤焦品位[1]; //数据输入 在这里输入代码 printf(“输入等级{a、B、C、D、F]:”; scanf(“%c”级和等级); //If语句 如果(等级=='a'=='a') printf(“A级分数为4.00”); 其他的 如果(等级=='b'='b') printf(“B级分数为3.00”); 其他的 如果(等级=='c'=='c') printf(“C级分数为2.00”); 其他的 如果(等级=='d'='d') printf(“D级分数为1.00”);

If-else语句没有';我不能在C工作 #包括 void main() { //声明 煤焦品位[1]; //数据输入 在这里输入代码 printf(“输入等级{a、B、C、D、F]:”; scanf(“%c”级和等级); //If语句 如果(等级=='a'=='a') printf(“A级分数为4.00”); 其他的 如果(等级=='b'='b') printf(“B级分数为3.00”); 其他的 如果(等级=='c'=='c') printf(“C级分数为2.00”); 其他的 如果(等级=='d'='d') printf(“D级分数为1.00”);,c,if-statement,codeblocks,C,If Statement,Codeblocks,我尝试了很多次,但是if-else语句没有弹出 我试图让程序识别A-F或A-F级的大写和小写字母,但似乎不起作用 输入等级{a,B,C,D,F]:a 进程返回1(0x1)执行时间:2.599秒 按任意键继续 给我这个它没有失败。你的比较失败了。你是说: #include<stdio.h> void main() { //Declaration char grade[1]; //Data Input enter code here print

我尝试了很多次,但是if-else语句没有弹出 我试图让程序识别A-F或A-F级的大写和小写字母,但似乎不起作用

输入等级{a,B,C,D,F]:a

进程返回1(0x1)执行时间:2.599秒 按任意键继续


给我这个

它没有失败。你的比较失败了。你是说:

#include<stdio.h>

void main()
{
    //Declaration
    char grade[1];

    //Data Input
    enter code here
    printf("Enter a grade{A,B,C,D,F]: ");
    scanf("%c",&grade);

    //If Statement

    if(grade=='a'=='A')
        printf("The score for the grade 'A' is 4.00");
    else
        if(grade=='b '=='B')
            printf("The score for the grade 'B' is 3.00");
        else
            if(grade=='c'=='C')
                printf("The score for the grade 'C' is 2.00");
            else
                if(grade=='d'=='D')
                    printf("The score for the grade 'D' is 1.00");
这永远不可能是真的。请尝试:

If (grade is equal to 'a') is equal to'A'....
仔细观察:

if(grade == 'a' || grade == 'A')...
相同类型的运算符从左向右移动,因此这与

if(grade=='a'=='A')
因此,您正在将
等级
'a'
'a'
进行比较的结果进行比较。这没有任何意义

if ((grade == 'a') == 'A')
不做您想做的事情——它计算
等级=='a'
,该值为true(1)或false(0),然后将该值与
'a'
进行比较,后者永远不会为true 1

您通常会这样处理多重比较:

if(grade=='a'=='A')
但是,在直观比较中处理大小写的正确方法是使用
toupper
tolower
库函数之一将所有内容转换为大写或小写:

if ( grade == 'a' || grade == 'A' ) // grade equals 'a' OR grade equals 'A'
这样,您只需评估
tolower(grade)
一次,而您的代码不会在页面上移动

其他随机噪音

  • main
    返回
    int
    ,而不是
    void
    。编译器可能会抱怨,也可能不会抱怨,但不应该使用
    void main()
    。如果程序不接受任何命令行参数,请使用
    int main(void)

  • 写字符常量时要小心-
    'b'
    'b'
    不同,可能无法按预期方式处理

  • %c
    转换说明符与
    scanf
    一起使用时要小心。与
    %s
    %d
    %f
    转换说明符不同,它不会跳过任何前导空格。在进行交互式输入时,这尤其危险,因为它会从上一个ous输入。为确保跳过前导空格,请在说明符前面的格式字符串中添加空格:
    scanf(“%c”,&grade);

  • 检查
    scanf
    的结果,确保您在尝试处理它之前确实阅读了一些内容。
    scanf
    将返回成功转换和分配的次数(如果输入与转换说明符不匹配,则返回0),如果输入错误,则返回
    EOF


  • 好吧,除非你找到一个将
    'a'
    编码为1的系统,否则你不会这样做,即使你这样做了,这意味着所有剩余的测试仍然会因为同样的原因失败。

    您正在将等价性检查的结果与字符进行比较?为什么?确切地说,
    grade=='a'=='a'
    应该做什么?因为我保证它不会做您认为它会做的事情。我想您的意思是“如果grade等于'a'本身等于'a'”不。如果分数等于“a”,这将导致他的样本输入
    a
    true
    ,那么它将被评估为
    ,如果true等于“a”
    ,那么它将进行比较
    。我很难理解为什么一个正确的、被接受的答案会被否决。我试图做的是让程序识别a,如果用户是e这是其中的一个。但是你说的我试过了,但似乎没有work@johnk我不明白你在说什么。你试了什么?
    
    #include <ctype.h>
    ...
    if ( tolower( grade ) == 'a' )
    
    switch( tolower( grade ) )
    {
      case 'a' : printf( "Score for grade A is 4.00\n" ); break;
      case 'b' : printf( "Score for grade B is 3.00\n" ); break;
      case 'c' : printf( "Score for grade C is 2.00\n" ); break;
      case 'd' : printf( "Score for grade D is 1.00\n" ); break;
      case 'f' : break;
      default  : printf( "%c is not a valid grade\n", grade ); break;
    }