获取错误文件格式不正确,在 C 中读取文件

getting error file format incorrect, reading file in c

提问人:xNapz 提问时间:12/14/2022 最后编辑:genpfaultxNapz 更新时间:12/14/2022 访问量:47

问:

如果我运行 1 个数据,则程序执行成功。但是在 2 数据格式文件中不正确。我哪里做错了?

文件 .txt

1,Nanggroe Aceh Darussalam,Rumah Sakit,RSU Cut Nyak Dhien,Jl. Tm Bahrum No. 1 Langsa
2,Jawa Barat,Klinik Utama,dr. Sunarhadi,Raya Cikaret No. 12

读取代码

do{
    read = fscanf(file,
                    "%d,%100[^,],%100[^,],%100[^,],%100[^,]\n",          
                    &students[records].no, 
                    students[records].prov, 
                    students[records].tipe, 
                    students[records].nama,
                    students[records].alamat); 

    if (read == 5) records++;
    
    if (read != 5 && !feof(file)){
      printf("File format incorrect.\n");
      return 1;
    }
    
    if (ferror(file)){
      printf("Error reading file.\n");
      return 1;
    }

  } while (!feof(file));

输出 说

File format incorrect.

我怎样才能输出喜欢

No      : 1
Prov    : Nanggroe Aceh Darussalam
Tipe    : Rumah Sakit
Nama    : RSU Cut Nyak Dhien
Alamat  : Jl. Tm Bahrum No. 1 Langsa

No      : 2
Prov    : Jawa Barat
Tipe    : Klinik Utama
Nama    : dr. Sunarhadi
Alamat  : Raya Cikaret No. 12
c feof

评论

1赞 Cheatah 12/14/2022
使用类似 - 的函数解析行是灾难的根源。用于获取一行,然后使用任何用于解析该行的内容,如果您愿意,可以使用。scanffgetssscanf
0赞 chux - Reinstate Monica 12/14/2022
xNapzm ,请发布 及其 .studentsstruct
1赞 chux - Reinstate Monica 12/14/2022
@DevSolar,这里的使用不是问题,事实上,以一种晦涩的方式是正确的。问题出在 中。feof()"...%100[^,]\n"
0赞 DevSolar 12/14/2022
@chux-恢复莫妮卡 有时我扣动扳机的速度太快了。没有看到循环的中间。感谢您重新开放。feof()
0赞 Jonathan Leffler 12/14/2022
请注意,错误消息应写入 ,而不是 。stderrstdout

答:

3赞 Craig Estey 12/14/2022 #1

格式不正确。它要求在行中出现一个尾随逗号。

改变:

"%d,%100[^,],%100[^,],%100[^,],%100[^,]\n"

到:

"%d,%100[^,],%100[^,],%100[^,],%100[^\n]\n"

笔记:

  1. 切勿使用 .只需检查 的返回值并确保它等于 5。参见:为什么“while( !feof(file) )”总是错的?feoffscanf
  2. 你检查但从不显示你的ferrorerrnoprintf

评论

0赞 Jonathan Leffler 12/14/2022
并警惕 scanf() 格式字符串中的尾随空格。在这里,如果数据来自文件,除非有人粗心大意地提供文件名而不是 ,否则这可能不是问题,但总的来说,这是一个坏主意。/dev/ttyfile.txt