不要过程分析的直接下拉最后
分析如下:::::
对于字符串的输入,一直是很怕,在写代码的过程中都是避免使用,特别是当需要输入2个字符串的时候,经常出现如下的情况:
#include"stdio.h"
main()
{
int k;
char p[10],o[10];
scanf("%d",&k);
gets(p);
gets(o);
printf("%s\n%s",p,o);//输出两个字符串数组
}
不可正常输入
也就出先当我输入一个数字和一个字符串之后,敲回车,就直接提示如如,按任意键结束了,
解决方法:
#include"stdio.h"
main()
{
int k;
char p[10],o[10];
scanf("%d",&k);
getchar();//加上这一句话,我称之会吃会车的语句
gets(p);
gets(o);
printf("%s\n%s",p,o);
}
这样做的目的,首先要知道gets()是从什么开始记录字符放入数组,遇到什么结束,其实这一方面。有的地方说是从第一个非回车的字符开始,另一种是连回车也可以放入字符串,我不想误人子弟,所以就用经验科学来解决问题,本质原因,有待分析。
再次举例
#include"stdio.h"
main()
{
int k;
char p[10],o[10];
scanf("%d",&k);scanf("%s%s",p,o);//利用scanf( %s )的方式输入
printf("%s\n%s",p,o);
}
可以看到,这样是可以直接输入成功的,不用吃输入完数字之后的回车,所以scanf( % s )是不一样的
再次举例然后找规律
#include"stdio.h"
main()
{
int k;
char p[10],o[10];
scanf("%d",&k);
scanf("%s",p);
gets(o); //一处用gets()另一处不同
printf("%s\n%s",p,o);
}
不可正常输入,输入一个数字然后再输入一个字符串,敲回车,直接结束输入还是不能输入两个字符串数组
请与下面的比较
可正常输入!!!
#include"stdio.h"
main()
{
int k;
char p[10],o[10];
scanf("%d",&k);
scanf("%s",p);
getchar();//重新请回吃回车的先生
gets(o);
printf("%s\n%s",p,o);
}
可正常输入!!!
最后再看一个例子
#include"stdio.h"
main()
{
int k;
char p[10],o[10];
//没有输入数字 直接输入
gets(p);
gets(o);
printf("%s\n%s",p,o);
}
可正常输入!!!
总结:
再使用gets()的时候,如果再它的前面有scanf( )的任何语句,例如scanf( %d ),scanf( %s ),都必须要有一句getchar(),用来吃掉回车
如果使用scanf( %s )来输入的,那么就不用管任何东西,