您好我想在C程序中使用fgets来查看.csv文件中的某个名称是否存在。如果是,则将其保存在数组中然后返回它。现在,它保存了.csv文件中的所有内容,我不确定原因。
C档案:
void FindRecord(char *filename, char *name, char record[]) {
char *temp = record; //temp save record
FILE *q = fopen(filename, "r"); //check that ths inputed .csv file exists
if (q == NULL ) { //if it doesn't, then print error message and exit
printf("This .csv does not exist");
exit(1); //terminate with error message
}
while(!feof(q)) { //while I'm not at the end of the file
fgets(temp, 1000, q); //Reads a line @ a time
for (int i = 0; i < 1000; i++) {
if(temp[i] == *name) {
record[i] = temp[i];
name++;
}
}
printf("%s", record);
}
fclose(q);
}
.csv文件:
Kevin, 123-456-7890
Sally, 213-435-6479
Megan, 415-336-8790
现在我运行程序时发生的是它返回3行。我希望iso如果*name
指向名称"Kevin"
并且它带有临时值,那么它就会返回:Kevin, 123-456-7890
答案 0 :(得分:2)
现在我运行程序时发生的是它返回3行。
我不明白这是怎么回事。您只有一个数组可以返回结果。我可以相信你的代码打印所有三行,但它只会返回。
我希望iso如果
*name
指向名称"Kevin"
并且它附带temp
,那么它就会返回:Kevin, 123-456-7890
嗯,你的代码在这方面有几个问题。其中最重要的是:
虽然它执行了一些逐字符比较,但它没有任何代码可以拒绝无法匹配的行。
它将temp
设置为指向与record
相同的数组,然后将每行读入该数组。即使没有找到匹配项,也会覆盖该数组,如果在最后一行读取的行上找到匹配,则实际匹配将丢失。
它在尝试匹配时修改name
指针,在部分匹配的情况下没有重置它的机制。
当尝试匹配名称时,它会快速扫描输入行中的,
分隔符,如果它们出现,则会在名称和输入字符串中显示字符串终止符。