-3

我目前正在为无法输出(printf)或无法正确读取二进制文件而苦苦挣扎。

以下代码的结果为 (fread: Success)。

if (fread(list, sizeof(struct Ticket), 10, fp) == 10){
    perror("fread");
}

然后我尝试使用以下代码 printf:

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 输入后,错误显示为分段违规。

PS fwrite 是用 perror("fwrite"); 测试的。并取得了成功。

抱歉英语和编程很差。如果有人能提供帮助,我将不胜感激。

谢谢

4

1 回答 1

0

如果要打印格式化输出,请使用fscanf而不是 fread。

fscanf()用于读取文本文件(即人类可读)

fread用于读取二进制文件(即计算机内部使用的格式)。

由于您以错误的方式编写了 scanf ,因此您遇到了分段违规。应该是

scanf("%d\n", &dec);

您正在使用格式说明符在屏幕上打印输出。然后您应该使用格式说明符读取数据。毫无疑问,您可以使用读取任何文件您可以在此处fread 阅读 fread 的使用

于 2013-10-01T06:11:35.607 回答