这是因为 scanf()的原因,它只是取出第一个 " " (空格) 前面的字符。(gets() 取出直到碰到 回车 )。
当你输入"a b c d" 然后回车时,scanf( "%s", string ) 只是把 "a" 取走,而" b c d"+ 回车 还留在标准输入输出的 缓存里, gets( string ) 就直接取出来,所以就不会等你输入了。
要不做下面测试:
#include
void main( void )
{
char str0[50];
char str1[50];
char str2[50];
printf( "input \"a b c d\"\n");
scanf( "%s", str0 );
scanf( "%s", str1 );
gets( str2 );
printf( "str0 : %s\n", str0 );
printf( "str1 : %s\n", str1 );
printf( "str2 : %s\n", str2 );
}
解决你的上面的方法太多了。。。就不再说了。
因为第一次输入,执行scanf后标准输入中还剩一个换行符没有被读取出来,gets读取时碰到换行符就直接返回了,只读取到一个空的字符串,改成这样就行了,gets前把标准输入中内容清空
printf( "Enter the same sentence with gets: " );
fseek(stdin,0,SEEK_END);
gets( string );
楼上说的很正确。。
用下面的fflush函数能更清楚一些。
printf( "Enter the same sentence with gets: " );
--> fflush(stdin); //清除缓冲区
gets( string );
改了肯定不一样,a是二维数组,a表示的是第一行的地址,实际上可以理解为指针数组a[N]的数组名,N表示的是行,*a表示的是第一行第一列的地址,可以理解为数组a[0][N]的数组名,而返回类型为指针,故要指向*a,即第一行第一列的地址才行,如果同时去掉*号,返回类型为int型,但是return a中的a是int型的指针数组!但是这个函数没有必要返回值,直接用void