如果else语句在C中不起作用

时间:2016-09-27 20:08:49

标签: c if-statement codeblocks

#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 else语句没有弹出 我试图让程序识别出A-F或a-f等级的大写和小写。但它似乎没有工作

输入成绩{A,B,C,D,F]:a

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

给了我这个

3 个答案:

答案 0 :(得分:3)

仔细看看:

if(grade=='a'=='A')

相同类型的运算符从左到右,因此与

相同
if ((grade == 'a') == 'A')

因此,您要将grade'a'的比较结果与'A'进行比较。这没有任何意义。

答案 1 :(得分:2)

if(grade=='a'=='A')

没有做你想做的事情 - 它评估grade == 'a',它是真(1)或假(0),然后将 值与{{}进行比较1}},永远不会为真 1

您通常会处理多种比较:

'A'

但是,处理不区分大小写比较的正确方法是使用if ( grade == 'a' || grade == 'A' ) // grade equals 'a' OR grade equals 'A' toupper库函数之一将所有内容转换为大写或小写:

tolower

如果#include <ctype.h> ... if ( tolower( grade ) == 'a' ) 输入为grade'A'的结果将为tolower( grade )。如果'a'输入为grade,则'a'的结果将为tolower( grade )。这样您只需要与单个值进行比较。

此外,您可能需要考虑使用'a'控制结构而不是switch语句链:

if-else

这样您只需评估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; } 一次,而且您的代码不会在整个页面上进行。

其他随机尼特......

  1. tolower( grade )返回main,而不是int。您的编译器可能会或可能不会抱怨它,但您不应该使用void。如果您的程序没有采用任何命令行参数,请void main()使用int main( void ),如果有,请int main( int argc, char **argv)

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

  3. %c转化说明符与scanf一起使用时请务必小心。与%s%d以及%f转换说明符不同,它不会跳过任何前导空格。这在进行交互式输入时尤其危险,因为它将从前一个输入中获取尾随换行符。要确保跳过前导空格,请在说明符前面的格式字符串中放置一个空格:scanf( " %c", &grade );

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

  5. <小时/>

    1. 好吧,除非你找到一个将'A'编码为1的系统,你就赢了,即使你这样做了,这意味着所有剩下的测试仍会因同样的原因而失败。

答案 2 :(得分:0)

它不会失败。你的比较失败了。你在说:

perl

永远不可能是真的。尝试:

If (grade is equal to 'a') is equal to'A'....