1、先看一下第一个代码
#include<stdio.h>
int main()
{
int a; //定义一个整型变量
char c[100]; //定义一个字符数组c
char c1[100]; //定义一个字符数组c1
scanf("%d",&a); //输入变量a的值
gets(c); //输入字符串c
gets(c1); //输入字符串c1
printf("%d\n",a); //打印变量a
printf("c=%s\n",c); //打印字符数组c
printf("c1=%s\n",c1); //打印字符数组c1
return 0;
}
该代码运行结果如下:
我们发现,我们只能输入一个字符串,该字符串作为的是c1的输入。c没有输入,小伙伴知不知到原因呢?
这是由于gets()函数结束输入的机制导致的这个结果,gets()作为字符串输入函数,遇到回车结束输入。而gets()执行前,scanf()函数先执行,它是以我们键盘敲如回车键结束的。我们输入的回车键有两个功能,回车和换行。gets()读到回车之后,就不在读取位于回车之后的字符了。所以,第一个gets(c)读取到scanf()结束输入时产生的回车,就结束读取了,所以c字符数组里不会有任何东西。
解决方法:加入一个在gets()和scanf()之间,加入一个getchar(),把scanf()函数产生的回车吃掉。
修正代码如下:
#include<stdio.h>
int main()
{
int a;
char c[100];
char c1[100];
scanf("%d",&a);
getchar(); //吃掉scanf产生的回车
gets(c);
gets(c1);
printf("%d\n",a);
printf("c=%s\n",c);
printf("c1=%s\n",c1);
return 0;
}
运行结果
这个时候,我们可以看到,c字符串在加入getchar()吃掉回车后,能正常输入了。 问题解决了,开心吧 哈哈哈哈哈哈哈哈哈
2、我们再来看一个代码:
#include<stdio.h>
int main()
{
char c[100];
char c1[100];
printf("hello world \n");
gets(c);
gets(c1);
printf("c=%s\n",c);
printf("c1=%s\n",c1);
return 0;
}
运行结果:
printf()函数打印的是hello world,在打印完成后有个换行符'\n',接下来我们输入c 和c1字符串,都能正常输入。发现我写这个代码的目的了吗。
对对对,你说的很对
我的目的是在说明‘\n'和咱们键盘输入回车键,对于gets()函数读取字符串的区别。 '\n'只有换行功能,回车键有回车和换行两个功能。