我的作业是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);
我注意到两件事:
- 你想读整数
%d
,而不是指针%p
- 您还需要提供存储scanf读取的数据的地址
fscanf(buildingsptr, "%d %d %d", &ptr->start, &ptr->height, &ptr->width);
还有一件事。在循环之后,ptr
指向您构造的值之后的某个内存。您需要返回到第一个元素,然后才能像您尝试的那样printf
值。