#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 按任意键继续。
给了我这个
答案 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;
}
一次,而且您的代码不会在整个页面上进行。
其他随机尼特......
tolower( grade )
返回main
,而不是int
。您的编译器可能会或可能不会抱怨它,但您不应该使用void
。如果您的程序没有采用任何命令行参数,请void main()
使用int main( void )
,如果有,请int main( int argc, char **argv)
。
写出字符常量时要小心 - 'b '
与'b'
不同,可能无法按预期方式处理。
将%c
转化说明符与scanf
一起使用时请务必小心。与%s
和%d
以及%f
转换说明符不同,它不会跳过任何前导空格。这在进行交互式输入时尤其危险,因为它将从前一个输入中获取尾随换行符。要确保跳过前导空格,请在说明符前面的格式字符串中放置一个空格:scanf( " %c", &grade );
。
检查scanf
的结果,确保在尝试处理之前确实阅读了某些内容。 scanf
将返回成功转换和分配的数量(如果输入与转换说明符不匹配,则返回0);如果输入错误,则返回EOF
。
<小时/>
'A'
编码为1的系统,你就赢了,即使你这样做了,这意味着所有剩下的测试仍会因同样的原因而失败。
答案 2 :(得分:0)
它不会失败。你的比较失败了。你在说:
perl
永远不可能是真的。尝试:
If (grade is equal to 'a') is equal to'A'....