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

#include<stdio.h>main(){chara1[5],a2[5],a3[5],a4[5];scanf("%s%s",a1,a2);gets(a3);gets... #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
展开
 我来答
小夏聊生活
高能答主

2019-12-08 · 专注于分享生活知识,热爱生活
小夏聊生活
采纳数:447 获赞数:114609

向TA提问 私信TA
展开全部

由于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’。

刺友互
高粉答主

2019-06-26 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:69.9万
展开全部

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

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

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

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

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

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

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

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于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没有赋值,所以它依然保持在定义时的随机值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qingfengyxj
2010-09-20 · 超过20用户采纳过TA的回答
知道答主
回答量:115
采纳率:0%
帮助的人:70.9万
展开全部
gets()读不到换行符,读取的换行符被转换为null值,并由此来结束字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Edsionguy
2017-11-06 · TA获得超过119个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:91.4万
引用WXD11011的回答:
注意这点,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没有赋值,所以它依然保持在定义时的随机值。
展开全部
最后一句应该有问题:分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。

a3赋值了吧? 第一个元素a3[0] 变成了‘\0’字符了吧?所以打印a3的时候不是一串垃圾值
而是空行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式