C语言笔记:重学输入和输出

   ACM金牌带你零基础直达C语言精通-课程资料

 本笔记属于船说系列课程之一,课程链接:ACM金牌带你零基础直达C语言精通icon-default.png?t=N7T8https://www.bilibili.com/cheese/play/ep159068?csource=private_space_class_null&spm_id_from=333.999.0.0

你也可以选择购买『船说系列课程-年度会员』产品『船票』,畅享一年内无限制学习已上线的所有船说系列课程:船票购买入口icon-default.png?t=N7T8https://www.bilibili.com/cheese/pages/packageCourseDetail?productId=598

做题网站OJ:HZOJ - Online Judge

Leetcode :力扣 (LeetCode) 全球极客挚爱的技术成长平台

一.三个标准流:stdin、stdout、stderr

标准输出流(stdout)

        对应的文件表示符为:1

        对于为什么打印一行字符串为什么会默认打印倒终端中,因为操作系统把标准输出流定向到了终端环境中。

        程序可以使用标准输出函数(如 printfputs 等)将数据输出到 stdout,从而在终端上显示结果。

标准输入流(stdin)

        对应的文件表示符为:0

        默认在终端环境中进行读取数据。

        用户可以通过键盘向程序提供输入,该输入会被发送到 stdin 中。程序可以使用标准输入函数(如 scanffgets 等)从 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初猿°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值