c - printf 结构从二进制文件到屏幕

标签 c

我目前正在努力解决无法输出(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/

相关文章:

c - Kmalloc 无法正常工作

c - 使用 C 实现堆栈得到错误 : is a pointer; did you mean to use ‘->’ ?

c - 指针到指针的段错误

c - 文件描述符和文件指针有什么区别?

C++ 代码比它的 C 等效代码慢?

c - C 中的 fread 和 fwrite 参数

c - 在 Sublime Text 3 中运行 C 仅显示 [finished ...s]

c - 这段代码是如何工作的?我如何获得此输出?

c - 缓存行开头的变量

c - 赋值宏编写