C语言文件操作
-
问题描述:对test.txt文件进行读取,需要读取文件中的int类型数据。
-
文件结构:
-
test.txt内容:
-
代码结构
- C 库函数 FILE *fopen(const char *filename, const char *mode) 使用给定的模式 mode 打开 filename 所指向的文件。
- C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
- C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
- C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
- C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
- C 库函数 int fclose(FILE *stream) 关闭流 stream。刷新所有的缓冲区。
- 代码实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
char str[10]; // 接收读取的字符串
char s[2] = " "; // 分割标志
char *token; // 分割的子字符串
int val; // 转化为int的值
FILE *fp = NULL; // 初始化为NULL
fp = fopen("test.txt","r"); // 以只读的方式打开文件
if(fp) {
printf("文件读取完毕!\n");
}
else {
printf("文件不存在!\n");
return 0;
}
while(fgets(str,10,fp)) { // 读取内容不为空,fgets一下读一行
token = strtok(str,s); // 获取第一个子字符串
while(token) { // 子字符串不为空
val = atoi(token); // 字符串转int
if(!val) { // 转化失败,说明字符串结尾有\n
token[strlen(token)-1] = '\0'; // 将最后一个\n替换为\0
val = atoi(token);// 字符串重新转int
}
printf("%d\n",val); // 打印输出
token = strtok(NULL,s); // 获取第二个子字符串
}
// puts(str); // 文件当中的换行符都会输出
}
fclose(fp); // 关闭文件
printf("文件已关闭!\n");
return 0;
}
- 运行结果: