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语句没有弹出 我试图让程序识别A-F或A-F级的大写和小写字母,但似乎不起作用 输入等级{a,B,C,D,F]:a 进程返回1(0x1)执行时间:2.599秒 按任意键继续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
给我这个它没有失败。你的比较失败了。你是说:
#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;
}