首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求解释,该如何处理

2012-03-20 
求解释char str[40][20]int n,i,j,x0,y0scanf(%d,&n)for(i0ini++)scanf(%s,str[i])/*gets(s

求解释
char str[40][20];
int n,i,j,x=0,y=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",str[i]);/*gets(str[i])与scanf("%s",str[i])*/
用scanf("%s",str[i])可以输入n个,而gets(str[i])只能输n-1个?
为什么呐?

[解决办法]
这是因为scanf("%d",&n);执行完后,还有一个回车符在缓冲区中!
而如果用gets输入的话,第一次会把缓冲区的那个回车符当做字符读进去,也就是说第一次读到的其实是一个回车符!
而scanf("%s",str[i]);不会!
[解决办法]
scanf("%d",&n);
输入数字之后的回车,被第一个gets读取
[解决办法]
你的意思是gets得到的字符串打印出来比scanf得到的少一个字符?

gets时,最后有一个:a null character ('\0')

[解决办法]
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
gets(str[i]);
[解决办法]
第一个scanf("%d",&n);
输出有个回车, 所以用gets得到的第一个是空串。

改为scanf("%d\n",&n);即可

热点排行