c - 无法将所有行 fscanf 到 Struct 数组中
问题描述
我正在尝试将 fscanf() 转换为结构数组。在发表这篇文章之前,我已经遵循了建议的解决方案,但由于某种原因,它似乎并没有读取文件中的所有数据。这只是我需要完成的开始,因为稍后我必须对结构中的项目进行排序。
#define LCOUNT 128 // Sizeof of single line
#define ROW_COUNT 2 // Number of lines in file
struct Hurricane {
char Year[50];
char Name[50];
char State[50];
};
int main() {
struct Hurricane hurricane[ROW_COUNT]; // Declare hurricane of type Hurricane array
// File operations
FILE *fptr = fopen("hurricane.txt", "r");
// Return error if file no bueno
if (fptr == NULL) {
fprintf (stderr, "Failed to open file");
return -1;
}
// Start of row
int ROW;
// Read comma as delimiter into Struct
while(ROW != ROW_COUNT) {
fscanf(fptr, "%[^,],%[^,],%[^,]\n", &hurricane[ROW].Year, &hurricane[ROW].Name, &hurricane[ROW].State);
printf("%s\t%s\t%s\n", hurricane[ROW].Year, hurricane[ROW].Name, hurricane[ROW].State);
ROW++;
}
// Close file
fclose(fptr);
return 0;
}
我的文件内容:
1960 年,唐娜,佛罗里达州-北卡罗来纳州
1969 年,卡米尔,MS
1972 年,艾格尼丝,佛罗里达州
然后输出:
1960 年唐娜 FL-NC
1969
-------------------------------- 进程在 0.02288 秒后退出,返回值为 0 按任意键继续。. .
解决方案
- ROW_COUNT 应该是 3 而不是 2
- ROW 应该像评论中提到的 bruno 一样初始化:
int ROW = 0;
fscanf 调用应如下所示
fscanf(fptr, "%[^,],%[^,],%[^\n]\n", hurricane[ROW].Year, hurricane[ROW].Name, hurricane[ROW].State);
如果,%[^,]
作为字符串的最后一部分进行搜索,则读取到下一个逗号,但您的行不以逗号结尾。因此最好使用 eg %[^\n]
。
推荐阅读
- for-loop - 在 lua for 循环中,# 用于什么?
- c - 无法生成 flex 输出文件
- keras - 具有共享参数的并行 LSTM 模型
- android - 如何将图像设置为圆形?
- amazon-web-services - AWS lambda 执行超出超时限制
- multithreading - 用于多线程的 Scala 迭代器
- node.js - 在 Node.js 中为群聊应用程序实现端到端加密的好方法?
- swift - iOS:关闭应用程序时如何在后台运行代码?
- python - 在捕获输入错误后在第二次迭代中出现问题
- ios - 如何将表格视图单元格从一个表格视图移动到一个新的表格视图