使用" fseek"时出错和"倒带"功能

时间:2014-05-21 18:41:57

标签: c system fseek

我在做C作业时遇到了麻烦。程序的目标是从文本文件中获取一些关于某些建筑物的数字,并使用那些计算城市轮廓的数字作为文本文件中写入的角点,在第一个文本文件编号中由三个标签部分编写,第一个编号是开始坐标,第二个数字是建筑物的高度,第三个数字是建筑物的宽度。例如,“24 7 6”意味着建筑物的角落是(24,0),(24,7),(30,7),(30,0)。我开始研究这个程序,但遇到了一些问题,所以我决定逐个编写,所以在下面的代码中,我试图从该文本文件中获取数字,将它们发送到动态内存部分然后打印出来屏幕上。但是,当我运行此代码时,它会因系统错误而启动和停止,错误代码为“c0000005”,这是由“fseek”或“倒带”引起的,因为当我删除这些函数时,程序运行不正常但不会给出错误,问题出在哪里?

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("%d\n", ftell(buildingsptr));
//rewind(buildingsptr);
fseek(buildingsptr, 0L, SEEK_SET);
printf("%d\n", 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;
     }

2 个答案:

答案 0 :(得分:0)

我注意到的两件事是:

  1. 您想要读取整数%d,而不是指针%p
  2. 您还需要提供存储scanf
  3. 读取数据的位置的地址
    fscanf(buildingsptr, "%d %d %d", &ptr->start, &ptr->height, &ptr->width);
    

    编辑:还有一件事。在循环之后,ptr指向>构造的值之后的某些内存。您需要回到第一个元素,然后才能printf尝试使用这些值。

答案 1 :(得分: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);