我将尽量保持简单而不是胡扯。我是一个相对的初学者,我在为自己的任务做什么时遇到麻烦。我得到了一个文本文件,其中包含开始城市,结束城市以及它们之间的距离。我必须使用该文本文件并在C中构造一个程序,该程序将它们分类为堆,并使用Dijkstras查找最短距离。到目前为止,我编写的代码是读取文本文件并打印出来,
struct intertown_distance{
char start[60];
char end[60];
int distance;};
void fileRead(struct intertown_distance data){
int i;
FILE *fptr;
fptr = fopen("data.txt", "r");
if (fptr == NULL)
{
printf("Can not open the file\n");
exit(1);
}
for(i=0; i<40; i++)
{
fscanf(fptr, "%s %s %d", data.start, data.end, &data.distance);
printf("%s %s %d \n", data.start, data.end, data.distance);
}
fclose(fptr);}
我是C语言,结构,节点概念以及所有这些不同类型的数据结构的新手,所以我想知道是否有人可以通过分享一些知识或一些阅读材料的链接来提供帮助,以帮助我理解和获取知识我开始了。我正在努力从课程中的任何其他人甚至实验室负责人/讲师那里寻求帮助。
非常感谢
答案 0 :(得分:1)
到目前为止,您的代码似乎运行良好。
我刚刚做了一些更改。希望你不介意。
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
/* max size of lines */
#define MAXCHARLINE 1000
/* max size of city names */
#define MAXCHARCITY 60
typedef struct intertown_dist_s
{
char start[MAXCHARCITY];
char end[MAXCHARCITY];
unsigned int distance;
}intertown_dist_t;
int main() {
FILE *fp;
char str[MAXCHARLINE];
char* filename = "data.txt";
intertown_dist_t data;
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("Could not open file %s",filename);
return 1;
}
while (fgets(str, MAXCHARLINE, fp) != NULL)
{
sscanf(str, "%s %s %d", data.start, data.end, &data.distance);
printf("%s %s %d \n", data.start, data.end, data.distance);
}
fclose(fp);
return 0;
}
然后您可以将已解析的intertown_distance元素存储在静态数组中:
#define MAXINTERTOWN 30
...
intertown_dist_t data[MAXINTERTOWN];
您还可以使用链接列表将它们存储为动态数组: https://www.geeksforgeeks.org/generic-linked-list-in-c-2/ 因为链表结构集成了节点概念,所以这可能是一个好的开始。 您也可以查看以下内容:Linked list with multiple parent and child nodes