我目前正在努力解决无法输出(printf)或正确读取二进制文件的问题。
The following code resulted as (fread: Success) though.
if (fread(list, sizeof(struct Ticket), 10, fp) == 10){
perror("fread");
}
然后我尝试使用以下代码打印:
for ( i = 0; i < 10; i++ ) {
printf("%d\t%s\t%d\n", list[i].code, list[i].station, list[i].price);
}
结果是困惑的无法识别的代码(尽管有 10 行)。
另外,当我尝试继续使用以下代码时:
printf("\nPlease submit your destination\n");
scanf("%d\n", dec);
fprintf(stdout, "%d\t%s\t%d\n", list[dec-1].code, list[dec-1].station, list[dec-1].price);
在 scanf 输入后出现分段违规错误。
附注使用 perror("fwrite") 测试了 fwrite; 并取得了成功。
抱歉英语和编程能力较差。 如果有人能提供帮助,我将不胜感激。
谢谢
最佳答案
如果要打印格式化输出,请使用 fscanf
而不是 fread。
fscanf()
用于读取文本文件(即人类可读)
fread
用于从二进制文件中读取(即采用使用的格式)
由计算机内部)。
由于您以错误的方式编写了 scanf,因此您遇到了分段冲突。它应该是
scanf("%d\n", &dec);
您正在使用格式说明符在屏幕上打印输出。然后您应该使用格式说明符读取数据。毫无疑问,您可以使用 fread
读取任何文件
您可以阅读 fread 的使用 here
关于c - printf 结构从二进制文件到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109056/