题目:
输入一个100分制的成绩score(整数),要求输出对应的等级:A: 90分以上,B:80~89,C:70~79,D:60~69,E:60以下。例如:输入90,输出A.。
有同学给出了下面的代码,该代码可以正常工作。但是,存在什么问题呢?
1 #include<stdio.h> 2 main () 3 { 4 int a; 5 scanf("%d", &a); 6 if(a<0 || a>100) 7 printf("No answer\n"); 8 else if(a>=90) printf("A\n"); 9 else if(a<=89 && a>=80) printf("B\n"); 10 else if(a<=79 && a>=70) printf("C\n"); 11 else if(a<=69 && a>=60) printf("D\n"); 12 else printf("E\n"); 13 return 0; 14 }
问题在于,没有采用正确的缩进方式。这样一来,第九行的else对应的是第八行的if还是第六行的if呢?正确的理解是:第九行的else对应第八行的if,但是第九行没有正确地缩进,由此,从文本形式上,很容易让人误解为:第九行的else对应第六行的if。同样的道理,既然第七行是来新的一行,那为啥你不把第八行分成两行呢?
更好的缩进方式可以参考如下:
0001 #include<stdio.h> 0002 main () 0003 { 0004 int a; 0005 scanf("%d", &a); 0006 if(a<0 || a>100) printf("No answer\n"); 0007 else 0008 if(a>=90) printf("A\n"); 0009 else 0010 if(a<=89 && a>=80) printf("B\n"); 0011 else 0012 if(a<=79 && a>=70) printf("C\n"); 0013 else 0014 if(a<=69 && a>=60) printf("D\n"); 0015 else printf("E\n"); 0016 return 0; 0017 }
上例中,每次缩进4个空格;而且很容易就从形式上分辨出哪个if对应着哪个else。
以此为例,给大家参考。