有个有关C语言字符串的问题向大家请教一下?谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/28 06:14:22
程序(1)如下:
main()
{
char a[10][10]; int m,i;
scanf("%d",&m);/*输入3*/
for(i=0;i<m;i++)
gets(a[i]);
}
结果却只能读入两个字符串,
为什么不能读入三个字符串呢?
(中能读a[1]和a[2]而不能读入a[0])
可能大家没注意过这个问题吧?
如果把程序改为:
main()
{
char a[10][10]; int m,i;
for(i=0;i<3;i++)
gets(a[i]);
}
也就是不用读入数据的方式来控制输入的字符串的个数,直接用一个常数来控制,这样能读入三个字符串,即a[0]a[1]a[2]。请各位指点为谢!!

楼上说得并不对,因为照你说的,如果在scanf后添加一个printf("hello");则下面就应该输出三个a的字符串。
但我运行了一下,发现还是只能输出两个。
代码如下:
#include <stdio.h>
main()
{
char a[10][10];
int m,i;
scanf("%d",&m);/*输入3*/
printf("hello");
for(i=0;i<3;i++)
gets(a[i]);
}
具体原因本人还不了解。继续关注此贴。。

补充:今天又找了些资料。才明白楼上说得没错,是因为前面有个scanf输入,留下了‘enter
‘这个字符。而该字符直接被gets接收。所以在接收之前,我们要先清除掉'enter',可在scanf之后添加语句:fflush(stdin);这样就可以了。。

输入流问题
前面的scanf接收数据后。
你输enter结束。
这个enter其实还在输入流中。
所在下面调用gets时。并不等你输入。(也就是相当于你输了enter)
这样第一个安符串就是一个空串