gets 和scanf区别

来源:百度知道 编辑:UC知道 时间:2024/07/07 18:48:06
#include<stdio.h>
int main()
{static int j,k;
char c[3][3];
for(j=0;j<2;j++)
for(k=0;k<2;k++) /*换成gets(c[j][k]);*/
scanf("%c",&c[j][k]);
for(j=0;j<2;j++)
{for(k=0;k<2;k++)
printf("%c",c[j][k]);
printf("\n");
}
return 0;
}
用这个程序输入
**
**
会输出
**

*
如果将 for(k=0;k<2;k++)
scanf("%c",&c[j][k]);
换成gets(c[j][k]);
就会输出
**
**
为什么?

这是回车符滞留缓冲区的问题。
第一次输入**然后回车,然后输入**再回车,实际上scanf读取的是**(回车符)*这4个数据。
gets函数读取方式是读取一个字符串并在后面加上'\0',这段程序用gets替换应该不会成功运行才对,因为你gets()的参数不合法,应该是一个地址。如果要用gets,应该取消第二个for循环,用gets(c[j]);才对。

gets()用到读取字符串,用回车结束输入

scanf()可以读取所有类型的变量。