3. 输入输出库 - <stdio.h>
<stdio.h>
是C语言中进行文件和标准输入输出操作的核心库。通过对该库函数和操作的应用,程序可以和用户进行交互、读写文件并处理各种形式的数据流。
3.1. 基础输入输出
3.1.1. printf
和 scanf
-
printf
: 主要用于在标准输出(通常是命令行界面)上显示信息。-
格式化输出: 可以通过格式说明符(如
%d
,%s
)指定输出的格式。 -
示例:
#include <stdio.h>int main() {int num = 10;printf("The number is %d\n", num);return 0; }
-
-
scanf
: 用于从标准输入读取数据。-
注意事项: 必须提供变量的地址,通常通过
&
运算符获取。 -
示例:
#include <stdio.h>int main() {int num;printf("Enter a number: ");scanf("%d", &num);printf("You entered: %d\n", num);return 0; }
-
3.1.2. getc
和 putc
-
getc
: 从输入流中读取一个字符。- 常用于: 文件或标准输入流读取。
-
putc
: 向输出流写入一个字符。-
示例:
#include <stdio.h>int main() {char ch;printf("Enter a character: ");ch = getc(stdin);printf("You entered: ");putc(ch, stdout);return 0; }
-
3.1.3. gets
和 puts
-
gets
: 从标准输入中读取一行字符串。- 风险: 不会检查缓冲区边界,导致潜在的缓冲区溢出问题。
- 注意: 推荐使用
fgets
替代。
-
puts
: 输出一个字符串到标准输出,并在末尾自动添加一个换行。-
示例:
#include <stdio.h>int main() {char str[50];printf("Enter a string: ");gets(str); // 注意: 使用 gets 存在风险,应使用 fgetsputs("You entered:");puts(str);return 0; }
-
3.2. 文件操作
3.2.1. 文件指针 FILE *
- 定义: C语言使用
FILE
数据类型处理文件,利用文件指针指向该FILE
对象。 - 关键点: 在进行文件操作前,必须先打开文件,关闭文件时须使用
fclose
。
3.2.2. fopen
, fclose
, fread
, fwrite
-
fopen
: 打开文件并返回文件指针。- 模式: 文件访问模式如 (
"r"
,"w"
,"rb"
,"wb"
等)。
- 模式: 文件访问模式如 (
-
fclose
: 关闭文件指针。 -
fread
和fwrite
: 进行二进制文件中数据的读写操作。-
示例:
#include <stdio.h>int main() {FILE *fp = fopen("example.txt", "w");if (fp != NULL) {fwrite("Hello, file!", sizeof(char), 12, fp);fclose(fp);}return 0; }
-
3.2.3. 文本文件和二进制文件的区别
- 文本文件: 内容以纯文本字符存储,适合人类阅读。
- 二进制文件: 数据以其原始形式存储,更节省空间,且适合程序处理。
3.3. 格式化输入输出
3.3.1. fprintf
和 fscanf
- 与
printf
和scanf
类似,但允许在指定文件中进行格式化读写。
3.3.2. sprintf
和 sscanf
sprintf
: 与printf
类似,但输出结果被存入字符串中而非打印到终端。sscanf
: 从字符串中读取格式化数据。
3.4. 高级文件操作
3.4.1. 读写位置调整函数:fseek
, ftell
, rewind
fseek
: 移动文件指针到指定位置。ftell
: 返回文件指针的当前位置。rewind
: 将文件指针移动到文件的开头。
3.4.2. 临时文件操作:tmpfile
和 tmpnam
tmpfile
: 创建并打开一个临时文件,该文件在关闭时被自动删除。tmpnam
: 生成一个唯一的临时文件名。