当我尝试压缩代码时出现错误(C)

  • 本文关键字:错误 压缩 代码 c
  • 更新时间 :
  • 英文 :


所以我一直在尝试简化这段代码,因为当我按原样键入时,每一行都非常长。

这是我不断得到的一段代码和错误:这是一个Bellman-Ford算法。

void BellmanFord (struct graph*graphs, struct point * pointer, struct city* startCity, struct city* destinationCity)
{
char * name;
//char * finalRoute;
// creating new arrays
int nEdge = graphs -> nEdge;
int nVert = graphs -> nVert;
//tracks energy expenditure
int energy[nVert];
// tracks path travelled
//int nTravel = nEdge; ///trial
// I added this to try solve the error, it didn't work
//struct city*citiesVisited[nVert];
int i;
int j;
// sets the start city as 0, assigns the rest to infinite
for (i = 0; i < nVert; i++); ///should it be 0?
{
//startCity = graphs -> cities[i];
energy[i] = INT_MAX;
//citiesVisited[i] = pointConstructor(begin, end, INT_MAX);
}
//energy
// graph searches for a more energy efficient route
for (i = 1; i < nVert; i++);
{
// edges checked
for ( j = 0; j < nEdge; j++);
{
struct road * roads;
///int road1 = graphs -> roads[j];
///experimental
int startRoute = roads -> startCity;
int endRoute = roads -> destinationCity;
int weight = roads -> energy;
int travelling = roads -> destinationCity -> nCitiesVisited;
if (energy[endRoute] > energy[startRoute] + weight);
{
if (thisSeemsFamiliar(endRoute, startRoute) == 0);
{
// stops loops
if (endRoute == startCity);
{
return;
}
struct city * cities;
energy[endRoute] = energy[startRoute] + weight;
(these two lines give me the error " citiesVisited / nCitiesVisited undeclared, first use in this function)
(citiesVisited[travelling])[endRoute] = startRoute;
nCitiesVisited[endRoute]++;

}
}
}
}
};

然而,它们都在这里声明:

//vertex representing the cities
struct city
{
char* cityName;
//int volume;
struct point*first;
struct point*last;
int energy;
int nCitiesVisited;
struct city*citiesVisited[100];
};

当这两行写如下时,我没有错误,但我真的想把它们浓缩起来,好吗??

roads -> destinationCity -> citiesVisited [roads -> destinationCity -> nCitiesVisited] = roads -> startCity;
roads -> destinationCity -> nCitiesVisited++;

我没有看到任何"愚蠢的长";代码中的行。最长的是函数定义的第一行,但我只想通过将其拆分为两行来解决这个问题。你可以用你特别喊出的两行中的第一行做同样的事情。

更重要的是,我没有看到任何过于复杂的行或语句。您可以通过使用详细的标识符和空白来使代码行任意长,因此字符长度不是一个特别好的评估标准,除了便于阅读之外。

你写:

(这两行给我的错误是"citiesVisited/nCitiesVisited未声明,首次在此函数中使用(

(citiesVisited[travelling])[endRoute] = startRoute;
nCitiesVisited[endRoute]++;

是的,当然会。我不清楚为什么你会认为用citiesVisited替换roads -> destinationCity -> citiesVisited不会改变代码的含义,或者类似地,至少不会改变nCitiesVisited的含义。但是,您可以在一定程度上减少重复,从而通过在变量中记录roads -> destinationCity的值来缩短代码。例如,

struct city *destination = roads->destinationCity;
// ...
destination->citiesVisited[travelling][endRoute] = startRoute;
// ...
destination->nCitiesVisited[endRoute]++;

有鉴于此,我进一步指出,你已经。。。

int endRoute = roads -> destinationCity;

。。。这似乎是错误的。所有(其他(指示是roads->destinationCity的类型是struct city *,并且

  1. 您需要显式强制转换来将指针转换为整数,尽管有些编译器可能会接受无强制转换作为扩展。无论如何,您的编译器至少应该警告您这一点。

  2. 转换的结果不太可能适合用作数组索引,因为实际上发布的代码试图使用endRoute

最新更新