gpt4 book ai didi

c - 如何从csv文件中获取特定行?

转载 作者:行者123 更新时间:2023-11-30 20:28:41 25 4
gpt4 key购买 nike

我编写了一段代码,其中我试图获取从“A”开始的所有行。我的 csv 文件中有 A、A12 等,我想读取所有这些行。但我收到以下错误。不知道我哪里出错了。请帮忙。

CSV 文件

M,2,lion
A,1,tiger
B,2,cat
A1,7,dog
C,3,man
A2,9,mouse
A23,9,pouch

myfile.c

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

#define NUMLETTERS 100

typedef struct {
char letter[100];
int number;
char ani[100];
} record_t;

int main(void) {
FILE *fp;
record_t records[NUMLETTERS];
size_t count = 0;

fp = fopen("letters.csv", "r");
if (fp == NULL) {
fprintf(stderr, "Error reading file\n");
return 1;
}

while (fscanf(fp, " %s,%d,%s", records[count].letter, &records[count].number, records[count].ani) == 3) {
count++;
}

for (size_t i = 0; i < count; i++) {
if(records[i].letter== "A"){
printf("%s,%d,%s\n", records[i].letter, records[i].number,records[i].number);
}
}

fclose(fp);

return 0;
}

错误

myfile.c:29:16: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat=]
printf("%s,%d,%s\n", records[i].letter, records[i].number,records[i].number);

最佳答案

由于您搜索以A开头的字段,因此您只需比较letter的第一个字母,因此第28行变为:

if(records[i].letter[0] == 'A'){

你的编译器告诉你,你尝试将整数显示为字符串,这是因为你在第 29 行有一个拼写错误:number 而不是 ani,该行应该是:

printf("%s,%d,%s\n", records[i].letter, records[i].number,records[i].ani);

Sorry i got my output but some extra column added in my output as "0" A,1,tiger,0, A1,7,dog,0, A2,9,mouse,0, A23,9,pouch,0, – Abhik 2 hours ago

它来自您的 scanf 调用:在 scanf 中,%s 将读取直到找到空格(空格或制表符或换行符) )。您必须告诉 scanf 在找到第一个逗号后停止读取字母。为此,请将 %s 替换为 %99[^,]。更多解释在这里:Scanf guide .

所以你的阅读循环应该是这样的:

while (fscanf(fp, " %99[^,],%d,%s", records[count].letter, &records[count].number, records[count].ani) == 3) {
count++;
}

关于c - 如何从csv文件中获取特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006396/

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