gpt4 book ai didi

c - 从 CSV 文件中读取行并分离成值 (sscanf SIGSEGV)

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:45 26 4
gpt4 key购买 nike

我一直在开发一个程序,该程序想要从 csv 文件中读取 10 行并将名称和成绩分开。我使用了此处提供的文档 Reading values from CSV file into variables

不幸的是,我的代码在使用 sscanf 语句的那一行时抛出一个 SIGSEGV。我试图删除 %[^,]%f 之间的 ,,之后它可以工作但只获取名称,而不是成绩,这违背了目的。

#include <stdio.h>
#include <stdlib.h>

int main() {
char str[10][30], names[10][20];
FILE *fp;
int i;
float grades[10];

fp = fopen("names.txt", "rt");

for (i = 0; i < 10; i++) {
fgets(str[i], 30, fp);
sscanf(str[i], "%[^,], %f", &names[i], grades[i]);
printf("%s ", names[i]);
printf("%f ", grades[i]);
};
}

这是 csv 文件的内容:

Bob,8
Carla,7
Jack,5
Julie,3
Goncalo,9
Vera,6
Jesse,8
James,8
Francis,10
Monica,6

感谢您的帮助,如果您需要任何其他信息,请随时询问。

最佳答案

sscanf 的参数不正确,应该是:

sscanf(str[i], "%19[^,], %f", names[i], &grades[i]);

names[i] 是一个 char 数组,因此您不应传递其地址,而应传递其第一个元素的地址,即 &names[ i][0] 或简单地 names[i]

相反,grades[i] 是一个float。您必须将其地址作为 &grades[i]grades + i 传递,但它的可读性较差。

并且您应该检查返回值以验证输入字符串是否已正确转换。

同时删除 for block 末尾的多余 ;

关于c - 从 CSV 文件中读取行并分离成值 (sscanf SIGSEGV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com