【维生素C语言】第十九章:格式化输入输出函数讲解

本文介绍了C/C++中的printf, fprintf, sprintf, scanf, fscanf和sscanf等格式化输入输出函数,包括它们的用途、头文件引用、示例代码和运行结果,帮助读者掌握标准输入输出和文件操作中的格式化操作。
摘要由CSDN通过智能技术生成

 🔥 CSDN 累计订阅量破千的火爆 C/C++ 教程的 2023 重制版,C 语言入门到实践的精品级趣味教程。
了解更多: 👉 "不太正经" 的专栏介绍 试读第一章
订阅链接: 🔗《C语言趣味教程》 ← 猛戳订阅!

周末学习!防止入魔!

前言:

scanf、fscanf、sscanf / printf、fprintf、sprintf 这些函数长得都挺像的,它们分别都是干什么的呢?本篇博客将对这些格式化输入输出函数进行一个讲解。本篇为文件操作章节的延申,新手建议学过文件操作后观看,如果你还没有学文件操作可以先看以下两篇讲解文件操作的博客:

【维生素C语言】文件操作(上)本章为文件操作教学上篇,由浅入深的引入问题,然后逐一介绍知识。将详细讲解文件的打开和关闭、文件的顺序读写并精讲函数部分,初步学习“流”的概念!https://blog.csdn.net/weixin_50502862/article/details/119715195?spm=1001.2014.3001.5501【维生素C语言】文件操作下本章为文件操作教学下篇,将对文件的随机读写进行讲解,详细探讨上篇提到的文本文件和二进制文件。探究文件读取结束的判定、文件缓冲区等问题。https://blog.csdn.net/weixin_50502862/article/details/119807906?spm=1001.2014.3001.5501


 一、printf / fprintf / sprintf

0x00 printf 函数

📂 头文件:#include <stdio.h>

📚 针对标准输出的格式化输出语句 - stdout

🔍 MSDN介绍:printf - C++ Reference

💬 代码演示:printf 的用法

#include <stdio.h>

int main(void) {
    printf("Hello,World!\n");
    int a = 100;
    printf("a=%d", a);

    return 0;
}

🚩 运行结果如下:

0x01 fprintf 函数

📂 头文件:#include <stdio.h>

📚 针对所有输出流的格式化输出语句 - stdout / 文件

🔍 MSDN介绍:fprintf - C++ Reference

💬 代码演示:随便创建一个文件,在文件中写入一段话

#include <stdio.h>

char data[] = "Hey, nice to meet you~";

int main(void) {

    FILE* pf = fopen("test1.txt", "w");
    if (pf == NULL) {
        perror("fopen");
        return 1;
    }
    // 使用fprintf写文件
    fprintf(pf, "%s", data);

    fclose(pf);
    pf = NULL;

    return 0;
}

🚩 (代码成功运行)

0x02 sprintf 函数

📂 头文件:#include <stdio.h>

📚 作用:把一个格式化的数据转换成字符串。

🔍 MSDN介绍:sprintf - C++ Reference

 💬 代码演示:sprintf 的用法

#include <stdio.h>

struct S {
	char arr[10];
	int age;
	float f;
};

int main(void) {
	struct S s = { "hello", 20, 3.14f };
	char buffer[100] = { 0 }; // 用于存放

	sprintf(buffer, "%s %d %f", s.arr, s.age, s.f); // 把这些信息放到buffer中了
	printf("%s\n", buffer); // 将buffer打印出来

	return 0;
}

🚩 运行结果如下:

二、scanf / fscanf / sscanf

0x00 scanf 函数

📂 头文件:#include <stdio.h>

📚 针对标准输入的格式化的输入语句 - stdin

🔍 MSDN介绍:scanf - C++ Reference

💬 代码演示:scanf 的用法

#include <stdio.h>

int main(void) {
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    printf("a=%d, b=%d\n", a, b);

    return 0;
}

🚩 输入10 20,运行结果如下:

0x01 fscanf 函数

📂 头文件:#include <stdio.h>

📚 针对所有输入流的格式化输入语句 - stdin / 文件

🔍 MSDN介绍:fscanf - C++ Reference

💬 代码演示:fscanf 的用法

#include <stdio.h>

int data; // 存放读到的数据

int main(void) {
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL) {
        perror("fopen");
        return 1;
    }

    // 使用fscanf读文件
    fscanf(pf, "%d", &data);

    // 将读到的数据打印
    printf("%d\n", data);

    fclose(pf);
    pf = NULL;

    return 0;
}

 🚩 运行结果如下:

0x02 sscanf 函数

📂 头文件:#include <stdio.h>

📚 作用:从一个字符串中读取一个格式化的数据。

🔍 MSDN介绍:sscanf - C++ Reference

💬 代码演示:利用 sscanfbuffer 字符串中还原出结构体的数据

#include <stdio.h>

struct S {
	char arr[10];
	int age;
	float f;
};

int main(void) {
	struct S s = { "hello", 20, 3.14f };
	struct S tmp = { 0 };

	char buffer[100] = { 0 };
	sprintf(buffer, "%s %d %f", s.arr, s.age, s.f); // 把这些信息放到buffer中了
	printf("%s\n", buffer);

	// 从buffer字符串中还原出一个结构体数据
	sscanf(buffer, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.f));
	printf("%s %d %f\n", tmp.arr, tmp.age, tmp.f);

	return 0;
}

🚩 运行结果如下:

三、总结

scanf        针对标准输入的格式化的输入语句 - stdin

fscanf       针对所有输出流的格式化的输出语句 - stdin / 文件

sscanf      从一个字符串中读取一个格式化的数据

printf         针对标准输出的格式化输出语句 - stdout

fprintf        针对所有输出流的格式化输出语句 - stdout / 文件

sprintf       把一个格式化的数据转换成字符串


参考资料:

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

本章完。

评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王平渊

喜欢的话可以支持下我的付费专栏

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

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

打赏作者

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

抵扣说明:

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

余额充值