如下是我自己写的#include<stdio.h>
#include<conio.h>
int main()
{
int s,x;
char n[5];
while(1){
printf("\n please enter your name:");
gets(n);
if(n!="q[0]"&&"u[1}"&&"i[2]"&&"t[3]")
printf("\n please enter your score.");
scanf("%d",&s);
if(s>=80&&s<=100){
x=1;
}
else if(s>=70&&s<=79){
x=2;
}
else if(s>=60&&s<=69){
x=3;
}
else if(s>=50&&s<=59){
x=4;
}
else if(s>=0&&s<=49) {
x=5;
switch(x){
case 1:
printf("HD");
break;
case 2:
printf("D");
break;
case 3:
printf("C");
break;
case 4:
printf("C");
case 5:
printf("N");
break;
default:
printf("\n please enter a number between 0 and 100"); }
}
}
return 0;
}
不知道为什么只有case 5有作用,其他都不会显示结果?这是为什么?还有要求输入“quit”就退出,这个咋么写?
c语言作业 老师要求用switch 来判定学生分数等级
答案:6 悬赏:10 手机版
解决时间 2021-02-14 21:49
- 提问者网友:不爱我么
- 2021-02-14 17:16
最佳答案
- 五星知识达人网友:渊鱼
- 2021-02-14 18:31
#include<conio.h>
#include <stdio.h>
int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
gets(n);
if(n[0]=='q' && n[1]=='u' && n[2]=='i' && n[3]=='t' && n[4]=='\0') //这样就可以输入quit就退出了
break;
printf("\n please enter your score.");
scanf("%d",&s);
getchar(); //这里要用getchar吸收掉scanf按下回车时产生的换行符
if(s>=80 && s<=100)
{
x=1;
}
else if(s>=70 && s<=79)
{
x=2;
}
else if(s>=60 && s<=69)
{
x=3;
}
else if(s>=50 && s<=59)
{
x=4;
}
else if(s>=0 && s<=49)
{
x=5;
} //这里漏了个},导致x一直都是5
switch(x)
{
case 1:
printf("HD");
break;
case 2:
printf("D");
break;
case 3:
printf("C");
break;
case 4:
printf("C");
case 5:
printf("N");
break;
default:
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
已经通过编译,不懂追问,望采纳~~
P.S LZ代码规范不好,看得我头有点大。。。
#include <stdio.h>
int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
gets(n);
if(n[0]=='q' && n[1]=='u' && n[2]=='i' && n[3]=='t' && n[4]=='\0') //这样就可以输入quit就退出了
break;
printf("\n please enter your score.");
scanf("%d",&s);
getchar(); //这里要用getchar吸收掉scanf按下回车时产生的换行符
if(s>=80 && s<=100)
{
x=1;
}
else if(s>=70 && s<=79)
{
x=2;
}
else if(s>=60 && s<=69)
{
x=3;
}
else if(s>=50 && s<=59)
{
x=4;
}
else if(s>=0 && s<=49)
{
x=5;
} //这里漏了个},导致x一直都是5
switch(x)
{
case 1:
printf("HD");
break;
case 2:
printf("D");
break;
case 3:
printf("C");
break;
case 4:
printf("C");
case 5:
printf("N");
break;
default:
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
已经通过编译,不懂追问,望采纳~~
P.S LZ代码规范不好,看得我头有点大。。。
全部回答
- 1楼网友:持酒劝斜阳
- 2021-02-14 23:14
如果执行 case 5:
就执行后面的break;语句 结束switch 循环
- 2楼网友:轮獄道
- 2021-02-14 22:11
如果执行 case 5:
就执行后面的break;语句 结束switch 循环
再看看别人怎么说的。
- 3楼网友:拾荒鲤
- 2021-02-14 21:03
1.关于只有case5有作用是因为你 x=5后面漏了一个“}”这样只有在符合s>=0&&s<=49的时候才能够执行switch选择语句...
2.你的case4后面漏打了一个break啊....
3.你将循环语句的条件改成while(n != "quit"),将n的第一次输入改在while前
另外你这句话是? printf("\n please enter a number between 0 and 100");
switch结构default后面的东西是不会运行的吧...
整个while我觉得这么写好点:
gets(n);
while(n!="quit"){
if(n!="q[0]"&&"u[1}"&&"i[2]"&&"t[3]")
printf("\n please enter your score.");
scanf("%d",&s);
if()
。。。//四个判断语句将x赋值
switch(x){
case 1:。。
case 2:。。
case 3:。。
case 4:。。
default;
}
printf("\n please enter your name:");
gets(n);
}
- 4楼网友:末日狂欢
- 2021-02-14 20:56
修改后的代码如下,望采纳!
自己对比一下
#include<stdio.h>
int main()
{
int s;
char n[5];
while(1){
printf("please enter your name:");
scanf("%s",&n);
printf("please enter your score:(1~100):");
scanf("%d",&s);
if(s>100||s<0)
printf("您输入的成绩有误!请从新输入!\n");
else{
int flag=s/10;
switch(flag){
case 10:
case 9:
case 8:
printf("成绩等级是:A\n");
break;
case 7:
printf("成绩等级是:B\n");
break;
case 6:
printf("成绩等级是:C\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("成绩等级是:D\n");
break;
default:
break;
}
}
}
}
- 5楼网友:七十二街
- 2021-02-14 19:26
首先指出你的疑问:因为你的switch语句在最后一个if语句中,也就是说,当分数为s>=0&&s<=49时才执行switch语句,此时x==5。于是就执行case 5了。
修改:把switch语句与if语句并列。
更好的:你为什么用了if语句还要用switch语句呢,直接在if语句中输出不就行了吗?
还有输入quit退出的问题:建议使用scanf在接收字符串n。接收字符串n后判断是否等于”quit“,如果等于则break,退出while循环,否则往下执行。判断时可以用strcmp函数进行判断,也可以逐个的对字符串n进行判断。
为什么要用scanf而不用gets:当进行下一次的输入时,上次输入完分数后的回车会被这次的gets给吃掉;于是就会发现,当进行这次的输入时,”please enter your name“, ”please enter your score.“会同时出现。
下面是我帮你修改的程序,基本上没动。
#include<stdio.h>
#include<conio.h>
int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
scanf("%s", n);
if(n[0]=='q' && n[1]=='u' && n[2]=='i' && n[3]=='t')
{
break;
}
else printf("\n please enter your score.");
scanf("%d",&s);
if(s>=80&&s<=100)
{
x=1;
}
else if(s>=70&&s<=79)
{
x=2;
}
else if(s>=60&&s<=69)
{
x=3;
}
else if(s>=50&&s<=59)
{
x=4;
}
else if(s>=0&&s<=49)
{
x=5;
}
switch(x)
{
case 1:
printf("HD");
break;
case 2:
printf("D");
break;
case 3:
printf("C");
break;
case 4:
printf("C");
case 5:
printf("N");
break;
default:
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
这是我自己随意修改的:
#include<stdio.h>
#include<conio.h>
#include <string.h>
int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
scanf("%s", n);
if(strcmp(n, "quit")==0)
{
break;
}
else printf("\n please enter your score.");
scanf("%d",&s);
if(s>=80&&s<=100)
{
printf("HD");
}
else if(s>=70&&s<=79)
{
printf("D");
}
else if(s>=60&&s<=69)
{
printf("C");
}
else if(s>=50&&s<=59)
{
printf("C");
}
else if(s>=0&&s<=49)
{
printf("N");
}
else
{
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯