C语言io流读取数据
时间: 2025-01-03 07:40:28 浏览: 16
### C语言中IO流读取数据的方法
#### 使用`fread`函数读取二进制数据
当需要从文件中读取固定数量的数据项时,可以使用`fread`函数。此方法适用于读取二进制文件中的特定类型数据。
```c
#include <stdio.h>
int main(void){
FILE *fp;
int data[10];
fp = fopen("data.bin", "rb");
if (fp == NULL) {
perror("File opening failed");
return (-1);
}
size_t result = fread(data, sizeof(int), 10, fp); // 尝试读取10个整数
fclose(fp);
printf("Read %zu integers from file.\n", result);
}
```
这段代码展示了如何定义一个数组来存储读入的数据,并通过调用`fread`指定每次读取的元素大小(即`sizeof(int)`),以及希望读取的数量(本例中为10)。这对应于提到的情况,其中bsize等于单个整型变量所占空间而nmem表示所需读取的对象数目[^1]。
#### 利用`sscanf`解析格式化输入
对于文本文件而言,如果知道每行的内容遵循某种模式,则可借助`sscanf`来进行更复杂的解析工作。下面的例子说明了怎样把一行字符串拆分成多个部分并转换成相应的数值形式:
```c
char line[] = "23 apples";
int number;
char fruit[8];
if(sscanf(line,"%d %7s",&number,fruit)==2){
printf("%d of %s\n",number,fruit);
} else{
puts("Error parsing input.");
}
```
这里利用了`sscanf`按照给定模板解释源串的能力,从而提取出了两个有用的信息片段:一个是代表数量的整数,另一个是指代物品名称的一系列字符[^2]。
#### 调整文件位置指示器
有时为了实现随机访问或者跳过某些不需要的部分,在实际编程过程中可能需要用到`fseek`调整当前正在处理的位置。其基本语法如下所示:
```c
FILE* stream; /* 已经打开的目标文件 */
long offset = 10L; /* 偏移量 */
int origin = SEEK_SET;
// 设置新的文件指针位置
if(fseek(stream,offset,origin)!=0){
fprintf(stderr,"Failed to seek within the file!\n");
}
/* 继续后续操作... */
```
上述例子中,参数`SEEK_SET`意味着相对于文件开头计算新位置;还有另外两种方式分别是基于当前位置(`SEEK_CUR`)或是文件结尾(`SEEK_END`)进行定位[^3]。
阅读全文