首先声明一下:我是一个新手,遇到的问题的解决方法是从网上获取的。
关于该题目的问题的由来,是由于我写的一下代码引起的:
#include<stdio.h>
int main()
{
//实验输入字符串;
char a[20];
char b[20];
scanf("%s",&a);
printf("Printf:%s\n",a);
gets(b);
printf("Gets:%s",b);
return 0;
}
运行发现:gets不起作用,b无输出。问题原因是:输入字符串a后的回车,影响到后面输入第二个字符串的gets函数,gets函数虽然以回车作为输入确认,但不会保留这个回车符,所以如果直接敲回车,那么将认为输入了一个没有内容的字符串,即空字符串。所以第二个字符数组实际得到的是‘\0’。因为,scanf输入函数,会形成一个回车的缓存。这里可以在scanf后加一个清除缓存函数。
有同学把程序改成了这样:
#include<stdio.h>
int main()
{
char a[20];
char b[20];
scanf("%s\n",&a);
printf("Printf:%s\n",&a);
gets(b);
printf("Gets:%s",b);
return 0;
}
这样虽然,从运行结果来看,两个printf都有输入,但很奇怪:scanf输入一个字符串后,还需一个回车,然后还需输入,这样函数才会运行。这个问题的原因是: \n是换行符,就是在输出这一句话以后再这句话的结尾自动打一个回车,然后在输出其他内容。
这编文章参考:说说用scanf输入字符的问题http://blog.youkuaiyun.com/ch63771807/article/details/7915514
scanf("%d\n",&a);里的\n 有什么作用http://bbs.bccn.net/viewthread.php?tid=324533&page=2
再次感谢各位网友!