亲,帮忙解决一下这个问题吧 按理论scanf不读入换行符,但下一例子,scanf貌似将换行符读入程序,why?

#include <stdio.h>
int main()
{
char str[3][10];
char ch[3];
int i;
for (i=0;i<3;i++)
{
//scanf("%s",str[i]);
gets(str[i]);
ch[i]=getchar();
}
for (i=0;i<3;i++){
puts(str[i]);
putchar('\n');
putchar(ch[i]);
putchar('\n');
}
return 0;
}

第1个回答  2012-05-28

#include <stdio.h>

int main()

{

char str[3][10];

int i;

for (i=0;i<3;i++) {

scanf("%s",str[i]);

getchar();

}

for (i=0;i<3;i++) {

printf("%s\n",str[i]);

}

return 0;

}

改了一下程序,gets函数和scanf函数都不会接收回车符,所以要在后面用getchar接收剩余的回车符,这里可以不使用变量,其实你把getchar去掉,sacnf也会处理的毫无问题。。。。

虽然gets不接收回车符,但是puts会加一个回车符,很好验证,把上面代码的:

printf("%s\n",str[i]);

换成:

puts(str[i]);

发现打印结果一样,如下图。。其实gets和puts这2个函数最好不要用,有些编译器已经给出提示了,像我用的GCC编译器,在使用gets函数时会报警告:

char.c:(.text+0x2b): warning: the `gets' function is dangerous and should not be used.

就是说gets函数是危险的,建议不要使用。。。最好用printf和scanf。。~

相似回答