C stdio.h标准库

C语言标准库<stdio.h>详解

C语言标准库

输入输出操作的全面指南 – 编程小白的通俗解释

是C语言中最重要的标准库之一,它提供了输入输出功能的核心支持。

在C语言中,所有的输入输出操作都是通过”流”(stream)的概念来实现的。

你可以把”流”想象成一条”数据管道”,程序通过这条管道从键盘、文件等地方获取数据(输入),或者把数据发送到屏幕、文件等地方(输出)。

文件操作

fopen() – 打开文件

用于打开文件并建立文件流。需要指定文件名和打开模式。

大白话解释:就像你要看一本书,首先得打开书一样。fopen()就是打开文件的方法。

常用模式:

  • “r” – 只读(文件必须存在)
  • “w” – 只写(创建新文件或覆盖现有文件)
  • “a” – 追加(在文件末尾添加内容)
  • “r+” – 读写(文件必须存在)
  • “w+” – 读写(创建新文件或覆盖现有文件)
示例代码
FILE *file = fopen("data.txt", "r");
if (file == NULL) {
    printf("无法打开文件!");
    return 1;
}

fclose() – 关闭文件

关闭之前打开的文件。

大白话解释:就像你看完书要合上书本一样。fclose()就是关闭文件的方法。

关闭文件很重要,因为:

  1. 保存所有写入的数据
  2. 释放系统资源
  3. 防止文件被误操作
示例代码
fclose(file); // 关闭文件

文件定位

控制文件中读取/写入的位置。

重要函数:
  • fseek(文件指针, 偏移量, 起点) – 移动文件指针
  • ftell(文件指针) – 获取当前文件位置
  • rewind(文件指针) – 重置文件指针到开头

起点参数:

  • SEEK_SET – 文件开头
  • SEEK_CUR – 当前位置
  • SEEK_END – 文件末尾

输入输出函数

printf() – 格式化输出

将格式化的数据输出到标准输出(通常是屏幕)。

格式说明符:

  • %d – 整数
  • %f – 浮点数
  • %c – 单个字符
  • %s – 字符串
  • %p – 指针地址
示例代码
int age = 25;
float height = 1.75f;
printf("我今年%d岁,身高%.2f米\n", age, height);

输出: 我今年25岁,身高1.75米

scanf() – 格式化输入

从标准输入(通常是键盘)读取格式化数据。

注意点:

  • 需要传递变量的地址(使用&符号)
  • 输入的数据类型必须与格式说明符匹配
  • 输入时按Enter键确认
示例代码
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
printf("你输入的是: %d\n", num);

文件读写函数

用于读写文件的函数。

常用函数:
  • fprintf(文件指针, 格式, ...) – 向文件写入格式化数据
  • fscanf(文件指针, 格式, ...) – 从文件读取格式化数据
  • fgetc(文件指针) – 从文件读取一个字符
  • fputc(字符, 文件指针) – 向文件写入一个字符
  • fgets(缓冲区, 长度, 文件指针) – 从文件读取一行
  • fputs(字符串, 文件指针) – 向文件写入字符串
示例代码
FILE *file = fopen("output.txt", "w");
fprintf(file, "今天的日期是: %s", "2023-07-15");
fclose(file);

格式化函数

sprintf() / snprintf()

将格式化的数据写入字符串,而不是输出到屏幕或文件。

大白话解释:这两个函数就像printf(),但它们把结果存到字符串变量中,而不是打印出来。

snprintf()更安全,因为它限制了最大字符数,防止缓冲区溢出。

示例代码
char buffer[100];
int a = 5, b = 10;
sprintf(buffer, "%d + %d = %d", a, b, a+b);
// buffer现在包含:"5 + 10 = 15"

sscanf()

从字符串中读取格式化数据。

大白话解释:这个函数就像scanf(),但它从字符串中读取数据,而不是从键盘输入。

常用于解析字符串数据(如配置文件、用户输入等)。

示例代码
char data[] = "姓名:张三 年龄:25";
char name[20];
int age;
sscanf(data, "姓名:%s 年龄:%d", name, &age);
// name = "张三", age = 25

错误处理

feof() 和 ferror()

检查文件流的错误状态或结束状态。

feof(文件指针):检查是否到达文件末尾

ferror(文件指针):检查文件操作中是否发生了错误

示例代码
FILE *file = fopen("data.txt", "r");
char ch;

while ((ch = fgetc(file)) != EOF) {
    // 处理字符
}

if (feof(file)) {
    printf("成功读取到文件末尾");
} else if (ferror(file)) {
    printf("读取文件时发生错误");
}

perror()

打印一条描述错误的消息。

大白话解释:当程序出错时,perror()会打印出人类可读的错误描述,帮助你理解哪里出了问题。

它会根据全局变量errno的值显示相应的错误信息。

示例代码
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
    perror("打开文件失败");
    // 输出: 打开文件失败: No such file or directory
}

© 2023 C语言标准库指南 | 编程小白的通俗解释版

提示:在实际编程中,请务必检查文件操作和输入输出的返回值,以防止错误发生!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部