指针:"Expected identifier before '(' token"
Pointers: "Expected identifier before '(' token"
项目:源到目的地票价矩阵
语言: C.
理由:这是一个学校练习。我的输出已经过了一天,所有的问题都是这一行代码,我不知道问题出在哪里。
Objective: 编写一个程序,分别从列表中获取源节点、目标节点和成本值。处理完整个列表后,程序应该询问用户 he/she 希望看到哪个节点。当用户输入节点编号时,程序应输出节点可能的目的地列表及其各自的成本。该程序应尽可能使用最小内存(因此使用数组指针)。
范围: 指针和结构。
代码中的问题:
这些是变量
int nodes, edges, src, dst, cst, loop=0, temp=0;
Nodes为不同节点的个数。边代表连接数。 Src为源节点编号,dst为目的节点编号,cst为它们对应的cost。 Loop 是程序扫描文件的次数计数器。 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}};
正常情况下,我不应该这样做。大小应该取决于文件开头的节点数,但我认为问题源于列表不是数组。这实际上是 "Minimal Memory" 部分的妥协。如果有人可以改进这一点,我将非常感激。
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;
THIS. 这就是出现 "Expected identifier before '(' token" 错误的地方。我真的不知道我在这里做错了什么。请帮助我:(
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)
,注意括号的变化。
项目:源到目的地票价矩阵
语言: C.
理由:这是一个学校练习。我的输出已经过了一天,所有的问题都是这一行代码,我不知道问题出在哪里。
Objective: 编写一个程序,分别从列表中获取源节点、目标节点和成本值。处理完整个列表后,程序应该询问用户 he/she 希望看到哪个节点。当用户输入节点编号时,程序应输出节点可能的目的地列表及其各自的成本。该程序应尽可能使用最小内存(因此使用数组指针)。
范围: 指针和结构。
代码中的问题: 这些是变量
int nodes, edges, src, dst, cst, loop=0, temp=0;
Nodes为不同节点的个数。边代表连接数。 Src为源节点编号,dst为目的节点编号,cst为它们对应的cost。 Loop 是程序扫描文件的次数计数器。 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}};
正常情况下,我不应该这样做。大小应该取决于文件开头的节点数,但我认为问题源于列表不是数组。这实际上是 "Minimal Memory" 部分的妥协。如果有人可以改进这一点,我将非常感激。
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;
THIS. 这就是出现 "Expected identifier before '(' token" 错误的地方。我真的不知道我在这里做错了什么。请帮助我:(
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)
,注意括号的变化。