ACM金牌带你零基础直达C语言精通-课程资料
本笔记属于船说系列课程之一,课程链接:ACM金牌带你零基础直达C语言精通
https://www.bilibili.com/cheese/play/ep159068?csource=private_space_class_null&spm_id_from=333.999.0.0
你也可以选择购买『船说系列课程-年度会员』产品『船票』,畅享一年内无限制学习已上线的所有船说系列课程:船票购买入口
https://www.bilibili.com/cheese/pages/packageCourseDetail?productId=598
做题网站OJ:HZOJ - Online Judge
Leetcode :力扣 (LeetCode) 全球极客挚爱的技术成长平台
一.三个标准流:stdin、stdout、stderr
标准输出流(stdout)
对应的文件表示符为:1
对于为什么打印一行字符串为什么会默认打印倒终端中,因为操作系统把标准输出流定向到了终端环境中。
程序可以使用标准输出函数(如
printf
、puts
等)将数据输出到stdout
,从而在终端上显示结果。
标准输入流(stdin)
对应的文件表示符为:0
默认在终端环境中进行读取数据。
用户可以通过键盘向程序提供输入,该输入会被发送到
stdin
中。程序可以使用标准输入函数(如scanf
、fgets
等)从stdin
中读取数据。
标准错误输出流(stderr)
对应的文件表示符为:2
默认输出定向是终端环境中。
程序可以使用标准错误输出函数(如
fprintf(stderr, ...)
)将错误信息输出到stderr
,从而在终端上显示错误。
三个流的缓冲区
代码演示:
1.对于3种流的最基本的使用:
#include<stdio.h> int main() { //利用标准输出流输出 printf("hello world\n");// stdout int n; //利用标准输入流进行读取数据 scanf("%d", &n);// stdin printf("n = %d\n", n); //利用了标准错误输出流进行输出数据 perror("out of range\n");//stderr return 0; }
代码执行结果:
2.对于缓冲区的认识:
这段代码是可以执行的:
#include<stdio.h> int main() { printf("alskaskldjaslkdjlaskld123"); *((int *)(0)) = 5; return 0; }
执行结果:
可以看到终端上没有打印printf函数内的内容,但不能说明printf函数那句代码是有错误的,只是内容还在输出缓冲区里面,还没有进行输出,程序就执行崩溃了。
继续往下看:
在printf函数内容种最后加上一个换行符(\n),看输出结果:
因为遇到换行符
\n
时会触发缓冲区的刷新,即将缓冲区中的数据输出到终端中。这就体现了缓存区的作用。
另一种方法就是使用fflush进行对内容输出:
#include<stdio.h> int main() { printf("alskaskldjaslkdjlaskld123\n"); //stdout在操作系统种也是文件 //利用fflush函数进行对stdout文件进行冲刷,也就是刷新他的缓冲区 //然后内容就会打印到终端上 fflush(stdout); *((int *)(0)) = 5; return 0; }
执行结果:
窥探标准流fscanf和fprintf
C语言笔记:重学输入和输出
最新推荐文章于 2025-04-09 17:23:02 发布