C语言中gets函数能否只接收一个换行符 如gets(a),输入时输入回车

#include<stdio.h>
main()
{char a1[5],a2[5],a3[5],a4[5];
scanf("%s%s",a1,a2);
gets(a3);gets(a4);
puts(a1);puts(a2);
puts(a3);puts(a4);
}
键盘输入:
aa bb<回车>
cc dd<回车>

为何输出结果是:
aa
bb

cc dd

由于scanf函数遇到空格后就停止输入,如需要输入一句话的话,要尝试其他的函数例如gets()函数。

原型函数为char *gets(char*buffer),返回一个指向char的指针,返回的指针与传递给他的指针是同一个指针。

例子:

char name[20];

gets(name);

printf(“%s”,name);

此时在控制界面中输入hello world,输出将会是hello world。

上例同时也可以写成:

char name[20];

char *ptr;

ptr=gets(name);

printf(“%s”,name);

printf(“%s”,ptr);

此时两句话输出的都是hello world,从而证明ptr的指针就是赋给gets函数的指针。但是gets()函数有一个缺点,当输入的字符串的长度大于申请的空间时,会造成空间越界,此时在函数执行结束释放空间时会报错。

扩展资料

1、输出字符串的效果,宽度和精度同样也适用于字符串。

3、put是需要遇到’\0’才会输出的,因此通过字符串数组遍历赋值时,不要忘记加’\0’。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-26

C语言中gets函数可以只接收一个换行符 如gets(a),输入时输入回车,实现过程为:

1、首先我们新建一个dev C++的项目。

2、接下来在项目中新建C语言程序文件。

3、然后在C语言文件中声明一个字节数组。

4、通过printf函数提示用户输入字符串,通过scanf接收用户输入的字符串。

5、接着在通过printf函数输出用户输入的内容。

6、最后运行C语言程序,我们输入内容以后就可以输出了。

本回答被网友采纳
第2个回答  推荐于2017-11-06
注意这点,gets()函数会读取一行字符,直到遇到换行符'\n为止,并且这个换行符不会读取到数组中。

scanf("%s%s",a1,a2);
这一行把aa和bb读取并分别保存到a1和a2数组中,但是会把回车符留在缓冲区中。

gets(a3);gets(a4);
这里的gets(a3)会读取这个回车符,但是不会把回车符保存到a3数组,所以a3数组内容不会改变,接下来的gets(a4)将以回车结尾的cc dd读取并保存到a4中

puts(a1);puts(a2);
分别在单独的行中输出a1和a2字符串。
puts(a3);puts(a4);
分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。本回答被提问者采纳
第3个回答  2010-09-20
gets()读不到换行符,读取的换行符被转换为null值,并由此来结束字符串
第4个回答  2017-11-06
最后一句应该有问题:分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。

a3赋值了吧? 第一个元素a3[0] 变成了‘\0’字符了吧?所以打印a3的时候不是一串垃圾值
而是空行。
相似回答