好,今天继续我们的课程,这节课我们讲讲关于字符串和格式化输入输出的一些知识,获得知识是为了更好的在实践的过程中有理论知识的铺垫,而不是临危受命。总之学习是为了更好的生存更好的在这社会上生存,你适应不了社会,社会总将会淘汰你。
上节课,我们讲到了数据和c,相信大家也认识到了很多相关的理论知识,那么现在我们就顺藤摸瓜,继续学习。首先这节课的主角是scanf()和printf()函数和char数组类型,也就是我们之前说的一个是打字 ,一个是把字打印出来,理论就是这样的操作过程。当然故事有了主角没有配角哪能演好一出戏呢,那么这个配角就是转化说明修饰符,目的就是来处理格式化的输入与输出。就好像对号入座的道理一样,就比如你上火车了,是不是有个座位号给你啊,然后你就要必须对着这个号码进行对号入座。那么现在我就来介绍几个最常见的转化说明修饰符。
最后的主角char闪耀登场,用一个例子说明一下 char name[40];这个语句说明了在name的储存空间中开辟了40个元素数目,因为是char的声明所以每一个元素大小为1B,不过在这个字符串数组中只能放入39个元素的数目,这是为什么呢,原来,在字符串数组中最后一个元素必须要加一个,以表示结束的标志。
来看看一个例子把两个内容结合一下。
#include <stdio.h>
int main ()
{
char name[40] ; //声明一个叫name的储存空间,数组的元素数目是40
printf('what is your name ? ');//转化说明字符/n换行
scanf('%s,name');//输入一个字符串,使用了%s的转化修饰符,表示输入字符串
printf('hello,%s. ',name);//输出字符串
return 0;
}
大家运行这个程序会发现一个很奇怪很有趣的现象。比如输入 xiao ming 输出的结果不是xiao ming而是xiao,这到底发生了什么事情呢,这就要说一说scanf函数的一个特点了,使用%s,scanf()只会读入一个单词就是连续紧挨的字符,而不是一个语句的读入,解决一个语句的读入可以使用gets()函数,这个函数我们会到后面有详细的讲解,再说回scanf()的特点,它说到底就是遇到空白字符,转化说明字符就会停止读入。这里需要十分留意。
说到scanf()函数,萌小编也着实给他坑了一把,说实在应该是微软坑了我一把,在小编使用visual stdio 2013进行编程的时候发现,当我使用sacanf函数时总会报错,一开始我也以为自己的语句有问题,但是找了半会也找不出来,最后索性找师傅问了一下,原来,微软为了内存保护为原则的目的,必须使用scanf_s('语句',转化说明字符,储存的空间)的模式进行编写,可以不让数据过大导致内存不够而溢出到另一个储存空间,当时我真的是直接骂娘了,醉了,这微软真会玩,看来win10小编也不升先了,不然给微软算计一番就不好。
小编也只能默默的感叹道:城里人真会玩,我还是回家耕田去吧。(想多了田都没得你耕呢!!)
本文属原创,转载请注明出处,谢谢!
如果对编程感兴趣,想了解更多的编程知识,解决编程问题,以及入门指导,帮你解决编程 中遇到的困惑,我们这里有java高手,C++/C高手,windows/Linux高手,android/ios高手,请大家关注微信公众号:程序员互 动联盟或者coder_online