提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
C语言中有多个输入输出函数,各个输入输出函数可能因为运算方式的不同导致其形成差异,令他们的使用场景不同,我们大多数人可能只会使用他,却不懂他们其中的运算原理,现在就由我来给大家介绍一下各个输入输出函数,使你轻松掌握他们
一、日常见到最多的输入输出函数
1.scanf和printf的使用
A.scanf在我们日常使用中作为输入函数进行使用,在visual stdio中此函数被禁用了,要改成scanf_S或添加这一串句子才能使用:#define _CRT_SECURE_NO_WARNINGS。scanf作为输入时,可以争对各种类型的数据,整形,浮点型,字符都行,此函数读到空格或\n时停止;scanf只拿空格或\n前面的内容,并不会取出\n.
B.printf是最常见的输出函数,基本每个数据都能用printf来输入,没什么特别点,应用广泛,十分全面的一个输出函数
2.getchar和putchar的使用
A.getchar表示字符的输入,每次输入一个字符;会读取\n,其返回的是ASCII码值,即返回的是int类型;与scanf的区别就是其只能输入一个字符,scanf都能输入;
B.putchar表示字符的输出,一般与getchar配合使用,写入时发生整形提升,且该值在内部转换为无符号字符。其库函数如下。
getchar是如何工作的呢?难道是键盘的直接输入,然后读取吗?
其实并不是,在键盘与getchar直接有个区域叫输入缓冲区,这个区域是真实存在的,当你输入a\n时,由于getchar一次只读取一个字符,他只会读取a,如果通过循环输入的话,就会有换行的效果,如下图。
此时输入b之后并不会直接输出,要输入\n,同时他也会给你换行。要停下来你只需按下ctrl z之后再按\n之后就能停下,如下图 。
C.接下来说一道易错题相信它能让你更加了解getchar和putchar的内部原理及使用。![](https://i-blog.csdnimg.cn/blog_migrate/e137c3ceb4eebdbd32b3c0460bd8b566.png)
这我都没有输入T/F就已经判读错误了呢,这就是关于scanf和getchar内部运行原理的问题。
这里你从键盘上输入数据到输入缓冲区,一开始不是要输入密码:123456\n,此时密码在输入缓冲区中,如下图
此时由于scanf此函数读到空格或\n时停止;scanf只拿空格或\n前面的内容,并不会取出\n.此时123456被取出,输入缓冲区里还有\n,getchar看到输入缓冲区里还有\n,它就直接读取放在ch里面去了,导致没有输入,如下图。
可能现在有人就会说了,只要在前面加个getchar就行,这样不就把那个\n给取出了,不就正常输入了吗?这确实是一种解决方法,此时的确能输出了。
可是要是密码不输入数字呢,就比如123456 abc呢,这样会发生什么情况呢? 你们想的没错,果然失败了,此时就应该要一个循环去处理后面的字符,把他们一个一个取出。
此时就是这个输入密码问题的完美答案了,要给它平方就是100分了,这就完美解决了,相信这能然各位更加了解getchar和scanf函数。
二.输入输出函数的进阶
1.gets和puts的使用
A.gets表示从标准输入(函数)获取字符串,他跟scanf有点类似,不过它是输入读取字符串,同时它读到文件末尾或\n时停止;且只拿\n前面的内容.这一点跟scanf很像。但它也有比scanf好的地方,其输入较为整洁,且遇到空格不会停,也会读取,同时其读取到\n时会把它取出丢弃,并不会把它留在缓冲区,使得后面不用清理\n.![](https://i-blog.csdnimg.cn/blog_migrate/cdf7171845c1a1babf82669d50c8e5a3.png)
如上面那道题,把scanf改成gets后就不用在消除\n了,这样就简洁了许多。
B.puts将字符串写入标准输出,该函数从指定的地址 (str) 开始复制,直到到达终止空字符 ('\0')。此终止空字符不会复制到流中。其库函数如下![](https://i-blog.csdnimg.cn/blog_migrate/4232148156b9944820ca7e5392413678.png)
puts在显示字符串时,在末尾会自动补充\n,其仅能输入字符串和putchar一样具有局限性,不如printf使用广泛,这就是其一点小缺陷吧。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了输入输出函数的使用,c语言中还有许多输入输出函数,学无止境,我还有许多不懂的地方,希望可以在这与大家共同进步。