【发布时间】:2015-01-22 15:11:24
【问题描述】:
我有以下结构:
struct V {
int d;
int tip;
char naziv[10];
int veza;
int tezina;
};
typedef struct V Vertex;
以下声明:
void kreiranje(Vertex cvorovi[]);
以下主要功能:
int main(){
int n=15;
Vertex cvorovi[n];
Vertex *pokazivac = &cvorovi[n];
kreiranje(pokazivac);
}
这是 kreiranje 函数背后的代码:
void kreiranje(Vertex cvorovi[])
{
int x,y,d,f,g;
int i = 0;
int brojac = 0;
char z[10];
char line[50];
char lined[50];
FILE *fr;
FILE *fp;
fr = fopen ("nodes.txt", "rt");
fp = fopen ("edges.txt", "rt");
while(fgets(line, 50, fr) != NULL)
{
sscanf (line, "%d|%d %s", &x, &y, &z);
cvorovi[n].d = x;
cvorovi[n].tip = y;
strcpy(cvorovi[n].naziv, z);
if(brojac < n){
fgets(lined, 50, fp) != NULL;
sscanf (lined, "%d-%d,%d", &d, &f, &g);
if (cvorovi[n-1].d == d){
printf ("\n Cvor prosli je %d\n", cvorovi[n-1].d);
printf ("\n %d \n", d);
cvorovi[n].veza = y;
cvorovi[n].tezina = g;
}
else {
cvorovi[n].veza = y;
cvorovi[n].tezina = g;
}
}
brojac++;
}
fclose(fr);
fclose(fp);
}
文件是这样的:
edges.txt
1-2,4
1-3,5
nodes.txt
1|1 EL_01
2|2 TF_01
在nodes.txt 的第一行,第一个数字表示在edges.txt 中使用的ID。我的问题如下 - 如果 ID 具有多个edges.txt 中给出的连接,我该如何检查和分配(就像示例所示)?
文件值读取正常,但我不确定如何获取结构值的前一个成员以用于比较。
【问题讨论】:
-
n在哪里?另外,Vertex *pokazivac = &cvorovi[n];大错特错。 -
@SouravGhosh 我忘了包含它,我稍后会编辑它。我不是 C 程序员,对于糟糕的代码我很抱歉,请您详细说明为什么该语句是错误的?
-
该语句(以及该函数中引用
cvorovi[n]的所有其他语句)是错误的,因为该函数的范围内没有变量n。我想你的意思是*cvorovi或cvorovi[0](它们在函数kreiranje()内部是等效的)。 -
此外,看起来您的函数几乎肯定会通过写入数组
cvorovi的末尾来引发未定义的行为,因为您实际传递给函数的是指向第一个位置的指针 在结束之后。 -
旁注:代码中的函数名、变量名和打印的字符串使其难以阅读。您需要付出一些努力将其翻译成 SO 用户最常用的语言(提示:它不是中文)。此外,请尝试提供一小段代码来说明您遇到的确切问题。