gpt4 book ai didi

c++ - 正如在 c 中解释的那样

转载 作者:行者123 更新时间:2023-11-30 20:15:56 24 4
gpt4 key购买 nike

我有一个问题,这是为什么,我只看到了实现

for(i=0;nlist[i].nid!=0;i++)
{}
nlist[i].nid=n_id;
nlist[i].add=temp;

nlist是类型结构的数组

结构体

struct node
{
int id;
struct node *l[MAX_CONN+1];
int cost[MAX_CONN+1];
struct node **next;
int *mincost;

};
typedef struct node nodes;
struct record

{
int nid;
struct node *add;
};
typedef struct record records;
records nlist[MAX_NODES+1]={0};

功能齐全

    FILE *f;
int d;
int i=0,j=0,n_id,n_cost;
nodes *temp=0,*temp1=0;

if((f=fopen("graph.txt","r"))== NULL)
{
printf("Error opening file.\n");
exit(1);
}
memset(nlist, 0, sizeof(struct record) * MAX_NODES);
count=0;
do /*first get the id and address of all nodes*/
{
fscanf(f,"%d",&n_id);
for(i=0;nlist[i].nid!=0;i++)
{
if(n_id==nlist[i].nid)
{
printf("Id already exists.");
return;
}
}
temp=(nodes *)malloc(sizeof(nodes));
if (temp == 0)
{
printf("ERROR: Out of memory\n");
return;
}
memset(temp, 0, sizeof(struct node));
temp->id=n_id;
temp->l[MAX_CONN+1]=0;
temp->cost[MAX_CONN+1]=0;
for(i=0;nlist[i].nid!=0;i++)
{}
nlist[i].nid=n_id;
nlist[i].add=temp;
count++;
while((d=fgetc(f)!=';'))
{}
}while((d=fgetc(f))!=EOF);

rewind(f);

for(i=0;i<count;i++) /*now get the information of all nodes connections.*/
{
fscanf(f,"%*d");

temp=nlist[i].add;
while((d=fgetc(f)!=';'))
{
fscanf(f,"%d-%d",&n_id,&n_cost);
for(j=0;nlist[j].nid!=0;j++)
{
if(nlist[j].nid==n_id)
{
temp1=nlist[j].add;
break;
}
}
for(j=0;temp->cost[j]!=0;j++)
{}
temp->cost[j]=n_cost;
temp->l[j]=temp1;
}
}
fclose(f);

最佳答案

缩进具有误导性。它应该缩进更像这样:

for(i=0;nlist[i].nid!=0;i++) {
/* empty loop */
}
nlist[i].nid=n_id;
nlist[i].add=temp;

我认为它应该做的事情如下:for循环将i从0前进,直到找到nlist的元素其 nid 字段具有空值。然后,它将该索引处的 nidadd 字段分别设置为 n_idtemp

我应该补充一点,这是非常危险的代码。如果i超出了nlist的末尾而没有找到合适的槽,则程序很可能崩溃或出现其他错误。它肯定不会正确运行。

关于c++ - 正如在 c 中解释的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com