容易被忽略的输入和输出
2016-11-27 00:13
155 查看
在C语言里,我们经常用scanf作为输入语句,用printf输出。那么关于输入和输出,你到底了解多少呢?
一、关于“&”
首先我们来看一容易被忽略的输入和输出
运行之后的结果是什么呢?是“Hello world!”么?当然不是。当我们运行了之后,会发现什么都不打印,并且陷入死循环。可能有人要问了,为什么不打印“Hello world!”呢?这便是我要给大家介绍的printf的一个特点。
printf是一个行缓冲函数,并且printf与scanf使用同一个缓冲区。先写到缓冲区,当满足一定的条件之后,才会将缓冲区的内容输出。而这里需要满足的一定条件如下:
①缓冲区满
②写入的字符里有’\n’
③手动刷新缓冲区
④调用scanf,需要从缓冲区读取数据
⑤程序退出
针对④,printf与scanf使用同一个缓冲区,当使用scanf时,会吧printf在缓冲区的数据清出来,于是可以输出。针对⑤,在程序退出时,会把缓冲区打扫干净,同样会清缓冲区,在清缓冲区的过程中会输出。
所以希望我们大家在使用printf时,养成加’\n’的好习惯,这样才不会出现一些本不应该出现的错误。
一、关于“&”
首先我们来看一容易被忽略的输入和输出
#include <stdio.h> int main() { printf("Hello world!"); while (1) ; return 0; }
运行之后的结果是什么呢?是“Hello world!”么?当然不是。当我们运行了之后,会发现什么都不打印,并且陷入死循环。可能有人要问了,为什么不打印“Hello world!”呢?这便是我要给大家介绍的printf的一个特点。
printf是一个行缓冲函数,并且printf与scanf使用同一个缓冲区。先写到缓冲区,当满足一定的条件之后,才会将缓冲区的内容输出。而这里需要满足的一定条件如下:
①缓冲区满
②写入的字符里有’\n’
③手动刷新缓冲区
④调用scanf,需要从缓冲区读取数据
⑤程序退出
针对④,printf与scanf使用同一个缓冲区,当使用scanf时,会吧printf在缓冲区的数据清出来,于是可以输出。针对⑤,在程序退出时,会把缓冲区打扫干净,同样会清缓冲区,在清缓冲区的过程中会输出。
所以希望我们大家在使用printf时,养成加’\n’的好习惯,这样才不会出现一些本不应该出现的错误。
相关文章推荐
- C++容易忽略的输入输出特性
- 容易被忽略的输入和输出
- C++ 容易忽略的输入输出特性
- C++ 容易忽略的输入输出特性
- 从键盘上任意输入一个3位整数,编译计算并输出它的逆序数(忽略整数前的正负号)
- 输入一个3位整数,编程计算并输出它的逆序数(例:输入-123,则忽略负号,由123分离出其百位1,十位2,个位3,并计算输出321)
- mysql容易被忽略的用法
- 输入a,b,c3个整数,按从大到小顺序输出(C语言)
- 实验 7 综合练习三、编程,输入x后,根据下式计算并输出y值
- 输入3个数a,b,c,按大小顺序输出
- 在echo输出html代码的时候,标签里的代码分两行来写,否则容易出现错误
- 在繁重的输入/输出负荷下,HP ProLiant 服务器将有可能遇到蓝屏问题
- WCF中几个容易忽略的知识点
- Java输入输出之文件
- 位运算训练03—输入一个整数a,再输入两个整数p1,p2(p1,p2<32);将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
- 【转】输入电阻和输出电阻的作用
- (六)mybatis学习之输入映射与输出映射
- OpenCV_(4):输入输出XML和YAML文件
- 输入姓名并分别输出姓和名
- C++ 打开文件进行输入和输出