C语言 如何读取以逗号分隔的.txt文件中的数据存储?



我需要读取以逗号分隔的.txt文件中的数据存储。StudentList.txt

Olivia,SWANSON,F,29001,20
Emma,ONEILL,F,7900,19

根据联机帮助,我尝试了以下操作:

FILE *fp;
char fname[20];
char sname[20];
char gender[2];
int ID;
int age;
fp = fopen("C:\Users\Catlover\Desktop\DSA\Program2\StudentList.txt", "r");
if(fp == NULL){
perror("Open fail.");
exit(1);
}
while(fscanf(fp, "%s,%s,%s,%d,%d", fname, sname, gender, &ID, &age) == 5)
{
printf("%s, %s, %s, %d, %d", fname, sname, gender, ID, age);
}
fclose(fp);
return 0;

可能是我对函数fscanf的原理理解有误

没有输出。

使用fgets()将数据的读入字符串,然后解析。使用" %n"检测成功。"%n"记录扫描的偏移量,如果它到达了那么远。使用%19[^,],读取最多19个非逗号和一个逗号。

// while(fscanf(fp, "%s,%s,%s,%d,%d", fname, sname, gender, &ID, &age) == 5) {
//   printf("%s,%s,%s,%d,%dn", fname, sname, gender, ID, age);
// }
#define LINE_SIZE 100
char buf[LINE_SIZE];
while(fgets(buf, sizeof buf, fp)) {
// Now parse it
int n = 0;
sscanf(buf, "%19[^,],%19[^,],%1[^,],%d,%d %n", 
fname, sname, gender, &ID, &age, &n);
if (n > 0 && buf[n] == 0) {
// Success
printf("%s,%s,%s,%d,%dn", fname, sname, gender, ID, age);
} else {
printf("Trouble with <%s>n", buf);
} 
}

第一个错误:您没有检查文件是否已成功打开。如果打开失败,fp将为'NULL',如果打开失败,任何后续操作都将失败。

Second:%s使用它找到的第一个空白字符之前的所有字符,包括逗号。试试%19[^,],吧。(它会在发现逗号时停止)。

最新更新