帮忙看看这个问题,关于C语言scanf函数输入单个字符%c用%s代替?

void main()
{
int i;
int num[35],order[35];
char flag;
float a[35][6]={0};
input(num,a);
count(a);
sort(a,order);
printf("该程序可以筛选用户指定课程成绩在90分(含90分)以上,并且总分为前五名的学生情况,是否需要查询?(y/n)");
scanf("%s",&flag);
if(flag=='y')serch(num,a,order);
getchar();
getchar();
getchar();
}
这是我的主函数,另外的子函数没考过来,问题在于scanf那句,如果我用%c,运行有逻辑问题,你输入y后,好像程序根本就没有输入数据,我把%c换成%s就可以了,绝对无误。以前也遇到好多这种情况,这样换屡试不爽,可是我不清楚到底怎么回事。还有如果我把前面的子函数都删掉,上了就scanf,用%c是可以的,不知道这是怎么回事。高手给指点一二

慕婉清6462132
浏览 572回答 2
2回答

慕标琳琳

scanf("%c", &flag);输入 : y 再回车没反应?可能是在前面的input(num,a);count(a);sort(a,order);中存在有缓冲,因为%c不会跳过空格等空字符,而%s是会跳过的,这也许是唯一的差别。解决办法:在scanf("%c", &flag);前清空缓存fflush(stdin);然则也不清楚是不是这个原因,你完全可以打印一下flag的码值来调试一下嘛。你可以试一下,多年未动C的飘过。

米脂

原因是在input函数里面有接受用户输入的动作,而输入一定是以回车结束,那么这个回车就会残留在缓存中,而当你的scanf读取flag的时候,程序会自动获取前面的那个回车符号,这就是用%c会自动跳过的原因,而用%s的话,程序就会等待下一行输入,回车符号并不会被接收,建议在scanf("%c", &flag);修改为:fflush(stdin); //清空缓存scanf("%c", &flag);
打开App,查看更多内容
随时随地看视频慕课网APP