#include<stdio.h>int main(){ int i; int number[5],score[5]; printf("学号及成绩:"); for(i=0;i<5;i++) { scanf("%d,%d ",&number[i],&score[i]); } printf("符合要求:"); for(i=0;i<5;i++) { if(score[i]>=80) { printf("%d,%d ",number[i],score[i]); }} return 0;}
4 回答
onemoo
TA贡献883条经验 获得超454个赞
问题就出在 scanf 的格式化字符串中最后的空格,也就是 scanf("%d,%d ", ... 这里第二个 %d 后面的空格。
格式化字符串中空格会匹配输入流中的任何“空白字符”。默认的空白字符包括回车、空格、tab等。如果对此不太清楚请参考我在这个帖子中的回答:https://www.imooc.com/wenda/detail/400705 (尤其是关于空白字符和 extra bonus 的部分)
对于这里的代码,你输入每组数据后必然会再敲一个回车(或空格)来结束输入,然而正是由于 scanf 的格式化字符串中最后空格的存在,这个空格会将你输入的回车“消耗”掉。而且不管你在这时敲多少个回车空格,都会被消耗掉,所以导致你的输入始终没有结束。程序在这时不显示输出结果,好似卡在这里了,实际上是程序一直在等你结束输入。
之所以你说输入第六祖才能运行,其实是因为你输入了空白字符以外的东西,这造成了匹配失败,scanf 执行结束,所以程序才继续执行下去了。那么这里其实你不用完整输入第六组数据的,只要输入任何一个非空白字符,再按回车都可以。
再深入一点,其实前五组数据输入时也面临这个问题,每组数据都是由于有后面的输入才结束本组 scanf 的执行的。
- 4 回答
- 0 关注
- 968 浏览
添加回答
举报
0/150
提交
取消