项目:源到目的地票价矩阵
语言: C.
理由:这是用于学校练习。我的输出已经过去了一天,所有的问题是这种代码行,我不知道问题是什么。
目标:制作一个从列表中分别获取源节点,目标节点和成本值的程序。处理完整个列表后,程序应询问用户他/她希望看到哪个节点。当用户输入节点号时,程序应输出该节点可能的目的地及其各自成本的列表。该程序应尽可能使用最小的内存(因此在数组上使用指针)。
范围:指针和结构。
代码中的问题: 这些是变量
int nodes, edges, src, dst, cst, loop=0, temp=0;
节点用于表示不同节点的数量。边是连接数。Src表示源节点的编号,dst表示目的节点的编号,cst表示它们的相应成本。循环是一个计数器,用于指示程序将扫描文件的时间。Temp是使代码更易于阅读的值持有者。
这是结构
typedef struct path {
int num;
int *cost;
int *neighbors;
}path;
这是问题所在
fscanf (file, "%d %d", &nodes, &edges);
这将从文件的第一行获取节点和连接的数量。
printf("%d %d\n", nodes, edges);
path list[25000]={[0 ... 24999]{.num=0}};
通常,我不应该这样做。大小应取决于文件开头的节点数,但我认为问题出在表不是数组。这实际上是“最小内存”部分的折衷方案。如果有人可以改善这一点,我将非常有义务。
path * listp;
listp=&list;
puts("Processing data...");
while (loop<edges)
{
fscanf (file, "%d %d %d", &src, &dst, &cst);
这就是从文件列表中获取值的原因。(listp + src)-> num ++; (listp + dst)-> num ++; 每当我在列表中遇到连接数时,这将增加源节点和目标节点上的连接数。
realloc((listp+src)->cost, (listp+src)->num);
realloc((listp+src)->neighbors, (listp+src)->num);
这是为了增加成本和邻居可用的内存量,因此我可以存储更多的值。我在这里没有遇到任何错误,但是我不确定自己是否做对了。如果不是,请通知我。
temp=((listp+src)->num)-1;
这是为了使代码更明显。
(listp+src)->(cost+temp)=&cst;
(listp+src)->(neighbors+temp)=&dst;
这个。这是出现“((')令牌”错误之前的预期标识符)的地方。我真的不知道我在这里做错了什么。请帮助我:(
realloc((listp+dst)->cost, (listp+dst)->num);
realloc((listp+dst)->neighbors, (listp+dst)->num);
temp=((listp+dst)->num)-1;
(listp+dst)->(cost+temp)=&cst;
(listp+dst)->(neighbors+temp)=&src;
loop++;
}
基本上是漂洗然后对目标节点重复。
因此,我唯一的问题是最要强调的问题。我不知道我在做什么错。我认为我的代码也可能存在其他错误,但是到目前为止,编译器尚未向我发出警告。如果有人发现任何其他可能的错误,也可以指出对我有很大帮助。谢谢,麻烦您了。
(listp+dst)->(cost+temp)
在语法上是无效的:编译器试图告诉您,它希望使用标识符作为函数的指针,因此它(listp+dst)->foo(cost+temp)
成为格式正确的表达式。
因此,如果我正确理解了您想做什么,则应该使用(*listp)[dst].cost[temp]
。或者,如果您确实更喜欢指针算术((listp+dst)->cost+tmp)
,请注意括号中的更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句