c语言 - 使用"fseek"和"rewind"功能时出错



我的作业是C。程序的目标是从文本文件中获取一些关于建筑物的数字,并通过使用这些数字计算城市的轮廓作为写入文本文件的角点,在第一个文本文件中,数字由三个制表符分隔的部分编写,第一个数字是开始坐标,第二个数字是建筑物的高度,第三个数字是建筑物的宽度。例如,"24 7 6"表示建筑物的角是(24,0)、(24,7)、(30,7)、(30,0)。我开始研究这个程序,但遇到了一些问题,所以我决定一步一步地做,所以在下面的代码中,我试图从文本文件中获取数字,将它们发送到动态内存部分,然后在屏幕上打印它们。但是当我运行这段代码时,它会以系统错误开始和停止,错误代码是"c0000005",这是由"fseek"或"rewind"引起的,我猜,因为当我删除这些函数时,程序工作不正常,但没有给出错误,问题在哪里?

Buildings.txt如下所示:

24 7 4 5 7 11 26 9 7 9 5 5 3 12 4 33 9 6 37 5 7 12 9 10 273 64 3

#include <stdio.h>
#include <stdlib.h>
typedef struct building{
int start, height, width;
}BUILDING;
int main(){
FILE *buildingsptr;
char karakter;
int satir=0, i;
BUILDING *ptr;
double sum;
buildingsptr=fopen("buildings.txt","r");
while((karakter=fgetc(buildingsptr)) != EOF){
    if(karakter=='n') satir++;     
                                            }
ptr=(BUILDING*) malloc(satir*sizeof(BUILDING));

printf("%dn", ftell(buildingsptr));
//rewind(buildingsptr);
fseek(buildingsptr, 0L, SEEK_SET);
printf("%dn", ftell(buildingsptr));
for(i=0; i<satir; i++){
    fscanf(buildingsptr, "%p %p %p", ptr->start, ptr->height, ptr->width);
    ptr++;
}
printf("%d %d %d", ptr->start, ptr->height, ptr->width);

getch();
return 0;
     }

在问题码中有很多事情需要考虑。这是你当前的问题:

因为你从buildings.txt中读取整数,(不是指针);改变这个:

fscanf(buildingsptr, "%p %p %p", ptr->start, ptr->height, ptr->width);

:

fscanf(buildingsptr, "%d %d %d", &ptr->start, &ptr->height, &ptr->width);

我注意到两件事:

  1. 你想读整数%d,而不是指针%p
  2. 您还需要提供存储scanf读取的数据的地址

fscanf(buildingsptr, "%d %d %d", &ptr->start, &ptr->height, &ptr->width);
还有一件事。在循环之后,ptr指向您构造的值之后的某个内存。您需要返回到第一个元素,然后才能像您尝试的那样printf值。

最新更新