<cstdio> 是 C++ 标准库中的一个头文件,它包含了 C 语言标准 I/O 库的 C++ 封装,主要用于文件的输入和输出操作。
<cstdio> 库定义了一组用于执行输入和输出操作的函数,这些函数可以用于读写文件和控制台。
语法
在使用 <cstdio> 库中的函数之前,需要在 C++ 程序的顶部包含这个头文件:
#include <cstdio>
常用函数
<cstdio> 库中包含了许多用于文件 I/O 的函数,以下是一些常用的函数:
实例
1. 打开和关闭文件:
#include <cstdio> int main() { FILE *file = fopen("example.txt", "w"); // 打开文件用于写入 if (file == NULL) { perror("Error opening file"); return 1; } fclose(file); // 关闭文件 return 0;}
2. 向文件写入数据:
#include <cstdio> int main() { FILE *file = fopen("example.txt", "w"); if (file == NULL) { perror("Error opening file"); return 1; } fprintf(file, "Hello, World!n"); fclose(file); return 0;}
在 "example.txt" 文件中写入了 "Hello, World!"。
3. 从文件读取数据:
#include <cstdio>#include <iostream> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error opening file"); return 1; } char buffer[100]; while (fgets(buffer, 100, file) != NULL) { std::cout << buffer; } fclose(file); return 0;}
从 "example.txt" 文件中读取并输出 "Hello, World!"。
4. 使用 fscanf 和 fprintf 进行格式化输入输出:
#include <cstdio> int main() { FILE *file = fopen("data.txt", "w"); if (file == NULL) { perror("Error opening file"); return 1; } fprintf(file, "%d %fn", 42, 3.14159); fclose(file); file = fopen("data.txt", "r"); if (file == NULL) { perror("Error opening file"); return 1; } int number; float pi; fscanf(file, "%d %f", &number, &pi); fclose(file); std::printf("Number: %d, Pi: %fn", number, pi); return 0;}
输出结果:Number: 42, Pi: 3.141590
fopen 和 fclose
用于打开和关闭文件。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file) { // 文件操作 fclose(file); } else { // 处理错误 } return 0;}
fread 和 fwrite
用于从文件中读取和写入数据。
#include <cstdio> int main() { FILE* file = fopen("example.bin", "wb"); if (file) { int data = 12345; fwrite(&data, sizeof(data), 1, file); fclose(file); } return 0;}
fseek 和 ftell
用于在文件中移动文件指针和获取文件指针的位置。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file) { fseek(file, 0, SEEK_END); // 移动到文件末尾 long size = ftell(file); // 获取文件大小 fclose(file); } return 0;}
fflush
刷新文件流,将缓冲区中的数据写入文件。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "w"); if (file) { fputs("Hello, World!", file); fflush(file); // 确保数据立即写入文件 fclose(file); } return 0;}
printf 和 fprintf
用于格式化输出到标准输出或文件。
#include <cstdio> int main() { int value = 42; printf("Value: %d\n", value); // 输出到标准输出 FILE* file = fopen("output.txt", "w"); if (file) { fprintf(file, "Value: %d\n", value); // 输出到文件 fclose(file); } return 0;}
scanf 和 fscanf
用于格式化输入从标准输入或文件。
#include <cstdio> int main() { int value; scanf("%d", &value); // 从标准输入读取 FILE* file = fopen("input.txt", "r"); if (file) { fscanf(file, "%d", &value); // 从文件读取 fclose(file); } return 0;}
sprintf 和 sscanf
用于格式化输出到字符串和从字符串中读取。
#include <cstdio> int main() { char buffer[50]; int value = 42; sprintf(buffer, "Value: %d", value); // 输出到字符串 int readValue; sscanf(buffer, "Value: %d", &readValue); // 从字符串读取 return 0;}
fgets 和 fputs
用于从文件中读取字符串和写入字符串到文件。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file) { char buffer[100]; if (fgets(buffer, sizeof(buffer), file)) { // 读取成功 } fclose(file); } file = fopen("example.txt", "w"); if (file) { fputs("Hello, World!\n", file); // 写入字符串到文件 fclose(file); } return 0;}
getc 和 putc
用于从文件中读取字符和写入字符到文件。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file) { int c = getc(file); // 读取一个字符 fclose(file); } file = fopen("example.txt", "w"); if (file) { putc('A', file); // 写入一个字符 fclose(file); } return 0;}
feof 和 ferror
用于检测文件结束和文件错误。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file) { while (!feof(file)) { int c = getc(file); if (ferror(file)) { // 处理错误 break; } // 处理字符 } fclose(file); } return 0;}
EOF
表示文件结束标志。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file) { int c; while ((c = getc(file)) != EOF) { // 处理字符 } fclose(file); } return 0;}
NULL
表示空指针。
#include <cstdio> int main() { FILE* file = fopen("example.txt", "r"); if (file == NULL) { // 处理文件打开错误 } else { fclose(file); } return 0;}
注意事项