我在做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;
}
答案 0 :(得分:0)
%d
,而不是指针%p
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);