C语言 提问用puts 输出字符串时会自动加回车么?

C语言 提问用puts 输出字符串时会自动加回车么?,第1张

首先你看懂下面这段文字

scanf函数和getchar函数在输入时是读取到“回车”就结束的,而回车符留在了输入流缓冲区,当下一次输入仍用scanf或者getchar读入枝陵一个字符的时候,则会把缓冲区的回车符读取从而导致结果不正确,但若第二次是用scanf输入一个数字的时候,scanf则会跳过空白字符,可以正常输入。

在用scanf读入字符串如scanf("%s",str)时,在输入的过程中,如字符串内有空格如hello world,则只能读取到hello,因为scanf使用%s输入方式时,认为遇到空格、TAB、回车键则认为输入结束,因而只能读取无空格的字符串。

第一:要注意不同的函数是否接受空格符、是否舍弃最后的回车符的问题!

读取字符时:

scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);

getchar()以Enter结束输入,也不会舍弃最后的回车符;

读取字符串时:

scanf()以Space、Enter、Tab结束一次输入,不舍弃最后的回车符。

gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!

当你看明白了上面的,再看我给你下面的解释

//----------------------------------------

当程序运行到scanf(“%s%s”,s[0],s[1])语句时,你输入aaaa bbbb<CR>时,按照上面的,scanf函数在以%s形式输入字符串时遇到空格或回车会结束输入,所以aaaa传给了s[0],然后bbbb传给了s[1],但是最后你输入的这个回车字符不被scanf函数丢散差弃,留在了输入缓冲区中

然后当程序运行到gets(s[2])时,会读取到缓冲区中残留的这个回车,而gets函数遇到回车就代表输入结束,所以传给s[2]的是一个空字符串。

然后getss([3])你输入的cccc dddd就全部传给s[3]了,因为gets函数遇到空格不结束

这样你该明白了吧,还有puts函数输出猛掘戚的时候是自动换行的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12302259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存