c语言关于printf输出字符串以及scanf的一些问题

时间:2016.04.17 发布人:handong91

c语言关于printf输出字符串以及scanf的一些问题

已解决问题

谷歌handong91用户在2016.04.17提交了关于“窈窕淑女c语言关于printf输出字符串以及scanf的一些问题”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-08-15T00:18:53。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,千言万语,表达不了我的感激之情,我已铭记在心 !

希望以下的回答,能够帮助你。

第1个回答

用户名:liu364031374  

我们首先谈论一下printf函数,比如如下调用【printf("%s",ch1);】时会发生什么呢?程序会把ch1作为地址**传递给printf函数,然后printf函数按照这个地址往后一个个的打印出字符,但打印字符也要有个尽头吧,程序没理由无限的往后打印啊,所以在printf函数里面,尽头的条向粉脚造销件就是遇到空字符【也就是数值为0的字符】,printf会停止打印
弄明白这一点,咱们再回头看看题主的代码,首先看第一个程序:“ch武土味溶1”与“ch2”都是在全局域声明的,而在全局域声明的所有变量都有一个**同点:那就是都会被自动初始化为0【变成char想欢助散苗最的形式就是空字符】,所以第一个代码中,当ch1传递给printf时,printf一定会遇到一个空字符,因为您的ch纸接数善抓快针1数组为3个字节,而因为字节对齐的缘故,ch1与ch2之间,至少要隔4个字节,也就是说,在ch1的a、b、c后面,实际上还有一个空字符。不信的话您把第一个程序代码改成【charch1[]={'a','b','c','d'};charch2[]={'a','b','c','d'};】这种形式,其它不变再运行的话,相信ch1或ch2至少有一个会打印出【abcdabcd】这个字符串。接下来再说说第二个代码程序,原因也就很简单了,因为ch1是自动变量的性质,而自动变量是不会有默认初始化的形式的,况通美观也就是说ch1数组周围本身就是乱码,所以交给printf函数执行后,printf函研氢轴复问北心被家绿石数肯定会打印出几个乱陈措参载小影码,直至侥幸碰到意外的空字符为止。

接下来再谈谈sca秋预伯例际nf函数,scanf函数是一个int类型的函数,它从输入流中读取字符序列,然后把字符序列转换并匹配给其余的参数,它返回的是成功匹配的个数,如果碰到输入无法与格式相匹配的情况,比如您的【s】匹配数值,它就会返回0!这也就是意味着,下一次长液织明再调用scanf十往流类投息函数时,它会从上修一个转换失败的最后一个字符的下一个字符开始匹配