重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include "stdio.h"
创新互联是一家专注于网站制作、成都做网站与策划设计,萧山网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:萧山等地区。萧山做网站价格咨询:028-86922220
int main(void){
char a[][7]={"90~100","80~89","70~79","60~69","0~59"},ch;
printf("Please enter the class code(Error is quit)...\n");
while(scanf(" %c",ch)==1)
if(ch|=0x20,ch='a' ch='e')
printf("%s\n",a[ch-'a']);
else{
printf("Error, exit!\n");
break;
}
return 0;
}
#includestdio.h
int main()
{
float grade;
scanf("%f", grade);
if (grade = 90) printf("优");
else if (grade = 80) printf("良好");
else if (grade = 70) printf("中");
else if (grade = 60) printf("及格");
else printf("不及格");
printf("\n");
return 0;
}
首先指出你的疑问:因为你的switch语句在最后一个if语句中,也就是说,当分数为s=0s=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.“会同时出现。
下面是我帮你修改的程序,基本上没动。
#includestdio.h
#includeconio.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=80s=100)
{
x=1;
}
else if(s=70s=79)
{
x=2;
}
else if(s=60s=69)
{
x=3;
}
else if(s=50s=59)
{
x=4;
}
else if(s=0s=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;
}
这是我自己随意修改的:
#includestdio.h
#includeconio.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=80s=100)
{
printf("HD");
}
else if(s=70s=79)
{
printf("D");
}
else if(s=60s=69)
{
printf("C");
}
else if(s=50s=59)
{
printf("C");
}
else if(s=0s=49)
{
printf("N");
}
else
{
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
第一种在scanf后面应该加一个getchar
你为什么在第二个后面知道加第一个后面不知道加...
因为你在做scanf输入时实际上输入的是 88(成绩) 回车 来结束输入的
这个时候你把88赋值给了a但是 回车还在缓冲区里 如果你不用getchar来吸收回车那么
你第二次scanf时 由于缓冲区里面还有一个回车 所以不等你输入他就将回车赋值给了c
因此无法进行后续循环 你输入的Y/N反而是被getchar读取了
第二种问题和上面类似 在每一个scanf后面加一个getchar来吸收回车
或者使用fflush(stdin); rewind(stdin);来刷新缓冲区
然后你最后判断处出错了
if(b=='Y')
if(b=='N')break;
这里满足break的条件是先让b=Y 如果 b = Y判断成功 在判断b=N 当b=Y满足进一步要满足b=N这怎么可能能够break...
应该if(b=='Y') continue;
else if(b=='N')break;
另外我觉得这个判断有点繁琐了 你只需要判断一种就行了
只保留if(b=='N')break;就行了 当输入N时结束 其他任意输入继续 就够了