#include"stdio.h"
int main()
{
char c;
while(scanf("%c",&c)!=EOF)
{
if(c!='A'&&c!='B'&&c!='C'&&c!='D'&&c!='E')
{
printf("error\n");
}
switch(c)
{
case 'A':
printf("90~100\n");
break;
case 'B':
printf("80~89\n");
break;
case 'C':
printf("70~79\n");
break;
case 'D':
printf("60~69\n");
break;
case 'E':
printf("<60\n");
break;
}
}
return 0;
}
谁能帮我看看这个编程哪里出错了 怎么输出老是多一个error!!!
答案:4 悬赏:50
解决时间 2021-02-01 03:03
- 提问者网友:猖狂醉薇
- 2021-01-31 17:42
最佳答案
- 二级知识专家网友:年轻没有失败
- 2021-01-31 17:59
//加 flushall();清除键盘缓冲区;
#include"stdio.h"
int main()
{
char c;
while(scanf("%c",&c)!=EOF)
{
if(c!='A'&&c!='B'&&c!='C'&&c!='D'&&c!='E')
{
printf("error\n");
}
switch(c)
{
case 'A':
printf("90~100\n");
break;
case 'B':
printf("80~89\n");
break;
case 'C':
printf("70~79\n");
break;
case 'D':
printf("60~69\n");
break;
case 'E':
printf("<60\n");
break;
}
flushall();//清除键盘缓冲区
}
return 0;
}
#include"stdio.h"
int main()
{
char c;
while(scanf("%c",&c)!=EOF)
{
if(c!='A'&&c!='B'&&c!='C'&&c!='D'&&c!='E')
{
printf("error\n");
}
switch(c)
{
case 'A':
printf("90~100\n");
break;
case 'B':
printf("80~89\n");
break;
case 'C':
printf("70~79\n");
break;
case 'D':
printf("60~69\n");
break;
case 'E':
printf("<60\n");
break;
}
flushall();//清除键盘缓冲区
}
return 0;
}
全部回答
- 1楼网友:余生继续浪
- 2021-01-31 21:25
因为scanf是带缓冲区的函数
比如当你输入A然后按回车的时候
实际上缓冲区有两个字符,一个是A一个是'\n'(回车符)。
而且当c=='\n'的时候
满足c!='A'&&c!='B'&&c!='C'&&c!='D'&&c!='E'
所以会输出error
解决办法:
1,在while语句的最后面加个while((c=getchar())!='\n');
这样就能清除缓冲区中回车符及之前的所有字符,这是效率最高的
2,用系统函数fflush(stdin),同样是在while语句的最后加。这样起到同样的效果,就是清除缓冲区
3,将while改为if,一个一个字符的判断。
还有问题再追问。
- 2楼网友:24K纯糖
- 2021-01-31 19:48
集定义很多错误 一个元素的集根本不用定义 直接用就行了 links后面是括号自己改好了
- 3楼网友:一池湖水
- 2021-01-31 18:12
你的 while(scanf("%c",&c)!=EOF)错了
%c是以字符的形式接收数据
当你输入法一个字符A或B等,接着你按了回车.
系统把回车当成一个字符来处理了
所以你就会多了一个error.
你把它改成 while(scanf("%s",&c)!=EOF)就行了.
但这样的代码不够严谨
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯