为什么只要5个数据而输入要打6个数据才能运行,输出又会无视第六个数据,我的代码哪里有问题?

#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;

}


我人晕了
浏览 969回答 4
4回答

onemoo

问题就出在 scanf 的格式化字符串中最后的空格,也就是 scanf("%d,%d ", ...   这里第二个 %d 后面的空格。格式化字符串中空格会匹配输入流中的任何“空白字符”。默认的空白字符包括回车、空格、tab等。如果对此不太清楚请参考我在这个帖子中的回答:https://www.imooc.com/wenda/detail/400705   (尤其是关于空白字符和 extra bonus 的部分)对于这里的代码,你输入每组数据后必然会再敲一个回车(或空格)来结束输入,然而正是由于 scanf 的格式化字符串中最后空格的存在,这个空格会将你输入的回车“消耗”掉。而且不管你在这时敲多少个回车空格,都会被消耗掉,所以导致你的输入始终没有结束。程序在这时不显示输出结果,好似卡在这里了,实际上是程序一直在等你结束输入。之所以你说输入第六祖才能运行,其实是因为你输入了空白字符以外的东西,这造成了匹配失败,scanf 执行结束,所以程序才继续执行下去了。那么这里其实你不用完整输入第六组数据的,只要输入任何一个非空白字符,再按回车都可以。再深入一点,其实前五组数据输入时也面临这个问题,每组数据都是由于有后面的输入才结束本组 scanf 的执行的。

七友11

数组下标是从0开始的, number[0]   到number[5]就是6个数输出时你的for循环是i<5   就只循环五次   
打开App,查看更多内容
随时随地看视频慕课网APP