#include?"stdio.h"
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、成都做網(wǎng)站與策劃設計,蕭山網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:蕭山等地區(qū)。蕭山做網(wǎng)站價格咨詢: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("優(yōu)");
else?if?(grade?=?80)?printf("良好");
else?if?(grade?=?70)?printf("中");
else?if?(grade?=?60)?printf("及格");
else?printf("不及格");
printf("\n");
return?0;
}
首先指出你的疑問:因為你的switch語句在最后一個if語句中,也就是說,當分數(shù)為s=0s=49時才執(zhí)行switch語句,此時x==5。于是就執(zhí)行case 5了。
修改:把switch語句與if語句并列。
更好的:你為什么用了if語句還要用switch語句呢,直接在if語句中輸出不就行了嗎?
還有輸入quit退出的問題:建議使用scanf在接收字符串n。接收字符串n后判斷是否等于”quit“,如果等于則break,退出while循環(huán),否則往下執(zhí)行。判斷時可以用strcmp函數(shù)進行判斷,也可以逐個的對字符串n進行判斷。
為什么要用scanf而不用gets:當進行下一次的輸入時,上次輸入完分數(shù)后的回車會被這次的gets給吃掉;于是就會發(fā)現(xiàn),當進行這次的輸入時,”please enter your name“, ”please enter your score.“會同時出現(xiàn)。
下面是我?guī)湍阈薷牡某绦?,基本上沒動。
#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但是 回車還在緩沖區(qū)里 如果你不用getchar來吸收回車那么
你第二次scanf時 由于緩沖區(qū)里面還有一個回車 所以不等你輸入他就將回車賦值給了c
因此無法進行后續(xù)循環(huán) 你輸入的Y/N反而是被getchar讀取了
第二種問題和上面類似 在每一個scanf后面加一個getchar來吸收回車
或者使用fflush(stdin); rewind(stdin);來刷新緩沖區(qū)
然后你最后判斷處出錯了
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時結束 其他任意輸入繼續(xù) 就夠了