【C语言】如何从文件中读取数据?

如何从文件中读取数据?

在C语言中,你可以使用标准库中的函数来从文件中读取数据。下面是一些常用的方法:

使用 fscanf() 读取格式化数据

fscanf() 函数类似于 scanf(),但它从文件中读取数据而不是从标准输入。

c复制代码

|---|--------------------------------------------------------------|
| | #include <stdio.h> |
| | |
| | int main() { |
| | FILE *file; |
| | int number; |
| | float f; |
| | char str[100]; |
| | |
| | file = fopen("data.txt", "r"); |
| | if (file == NULL) { |
| | perror("Error opening file"); |
| | return 1; |
| | } |
| | |
| | // 从文件中读取数据 |
| | while (fscanf(file, "%d %f %s", &number, &f, str) == 3) { |
| | printf("Read: %d, %f, %s\n", number, f, str); |
| | } |
| | |
| | if (ferror(file)) { |
| | perror("Error reading file"); |
| | } else { |
| | printf("End of file reached.\n"); |
| | } |
| | |
| | fclose(file); |
| | return 0; |
| | } |

在上面的代码中,fscanf() 从文件中读取一个整数、一个浮点数和一个字符串,直到文件结束或出现错误。

使用 fgets() 读取一行

fgets() 函数用于从文件中读取一行文本。

c复制代码

|---|----------------------------------------------|
| | #include <stdio.h> |
| | #include <string.h> |
| | |
| | int main() { |
| | FILE *file; |
| | char line[100]; |
| | |
| | file = fopen("text.txt", "r"); |
| | if (file == NULL) { |
| | perror("Error opening file"); |
| | return 1; |
| | } |
| | |
| | // 从文件中读取每一行 |
| | while (fgets(line, sizeof(line), file)) { |
| | printf("%s", line); |
| | } |
| | |
| | if (ferror(file)) { |
| | perror("Error reading file"); |
| | } else { |
| | printf("End of file reached.\n"); |
| | } |
| | |
| | fclose(file); |
| | return 0; |
| | } |

fgets() 将读取一行,包括换行符(如果有的话),并将其存储在提供的缓冲区中。

使用 fread() 读取二进制数据

如果你需要读取二进制数据或大量的数据块,可以使用 fread() 函数。

c复制代码

|---|---------------------------------------------------------------|
| | #include <stdio.h> |
| | |
| | #define BUFFER_SIZE 10 |
| | |
| | int main() { |
| | FILE *file; |
| | int buffer[BUFFER_SIZE]; |
| | size_t itemsRead; |
| | |
| | file = fopen("binary_data.bin", "rb"); |
| | if (file == NULL) { |
| | perror("Error opening file"); |
| | return 1; |
| | } |
| | |
| | // 从文件中读取二进制数据 |
| | itemsRead = fread(buffer, sizeof(int), BUFFER_SIZE, file); |
| | if (itemsRead > 0) { |
| | printf("Read %zu integers: ", itemsRead); |
| | for (size_t i = 0; i < itemsRead; ++i) { |
| | printf("%d ", buffer[i]); |
| | } |
| | printf("\n"); |
| | } |
| | |
| | if (ferror(file)) { |
| | perror("Error reading file"); |
| | } else { |
| | printf("End of file reached.\n"); |
| | } |
| | |
| | fclose(file); |
| | return 0; |
| | } |

在上面的代码中,fread() 尝试从文件中读取 BUFFER_SIZE 个整数。fread() 返回实际读取的项数,这个数可能会少于请求的项数,尤其是当接近文件末尾时。

在使用 fread() 时,你通常需要检查返回值以确保读取了预期数量的项。

注意事项

  • 在读取文件时,总是检查返回值以确保操作成功。
  • 使用 ferror() 函数来检查是否发生了读取错误。
  • 使用 feof() 函数来检查是否已到达文件末尾。
  • 在完成文件操作后,使用 fclose() 关闭文件。

这些是从文件中读取数据的几种基本方法。根据你的具体需求和数据格式,你可能需要选择最适合你的方法。

相关推荐
夏虫不可与之言冰几秒前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
码爸6 分钟前
贪心算法介绍与示例
算法·贪心算法
-dzk-24 分钟前
【多维动态规划】LC 64.最小路径和
算法·动态规划
春涧草茶1 小时前
慢就是快12-12手动抛出异常
java·linux·前端
垆边人似月.1 小时前
华为机试题 :字符串压缩
算法·华为
ggb喔2 小时前
52pojie 的图片工具:为什么无损转换后体积涨了 6 倍、照片方向还是歪的
图像处理·python·算法·计算机视觉·图形渲染·媒体
小小龙学IT2 小时前
Go 语言 cgo 与 C/C++ 互操作深度解析:从 fwlib 直连到工业数采网关实战系列
c语言·c++·golang
菜鸟~noob2332 小时前
【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】
开发语言·算法·matlab
地平线开发者2 小时前
地平线征程6M YOLOv8s 部署
算法·自动驾驶
Run_Teenage2 小时前
算法:Manacher(马拉车)算法、中心扩展算法
算法