gets()读取到回车后,结束读取

184 阅读2分钟

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'只有换行功能,回车键有回车和换行两个功能。