我需要读取以逗号分隔的.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[^,],
吧。(它会在发现逗号时停止)。