1

我正在制作一个逐行处理文本文件的程序,但文件的第一行是一个单一的 int,它告诉我文件有多少行(标题)。问题是,我正在尝试定义一个数组来存储有关文件其余部分的信息,但我不断收到关于 city_info 和 city_dist 的未定义错误。知道我错过了什么吗?

这是代码:

    while(fgets(buffer,MAX_LINE,fp)!=NULL) {
    if(firsttime){
        int num_city = atoi(buffer);
        printf("NUMBER OF CITIES = %d\n",num_city);
        node city_info[num_city]; /*compiler says these are undefined*/
        int city_dist[num_city]; /*compiler says these are undefined*/
        firsttime=FALSE;
    }
    .
    .
    .
    /*rest of code*/

这是我得到的编译器错误:

help.c: In function `main':
help.c:33: warning: unused variable `city_info'
help.c:34: warning: unused variable `city_dist'
help.c:41: error: `city_info' undeclared (first use in this function)
help.c:41: error: (Each undeclared identifier is reported only once
help.c:41: error: for each function it appears in.) 
help.c:42: error: `city_dist' undeclared (first use in this function)

编辑:对于那些说我没有使用变量的人,我稍后在代码中使用了它

4

3 回答 3

1

在 if 块范围内定义的变量在此范围之外是不可见的。尝试这个:

int num_city;
node *city_info = null;
int *city_dist = null;
if(firsttime) {
    num_city = atoi(buffer);
    city_info = malloc(num_city * sizeof(node));
    city_dist = malloc(num_city * sizeof(int));
    // check if malloc actually worked...

    //...
}

//...
// clean up!
if (city_info != null) free(city_info);
if (city_dist != null) free(city_dist);
于 2013-10-15T13:54:27.217 回答
0

如果您在 C89 模式下编译(并且没有 GCC 扩展),那么这是无效的。
但是,如果您的编译器支持 C99 模式,那么在语句之后(或在任何块中)声明变量是完全合法的。

对于那些说我没有使用变量的人,我稍后在代码中使用了它

请记住您的 case variable num_citycity_info[num_city]并且city_dist[num_city]具有块范围,并且您无法在if范围之外访问它们(因为它对其他范围不可见)。此外,city_info[num_city]city_dist[num_city]仅由 C99 支持的可变长度数组

于 2013-10-15T14:03:11.427 回答
-1

您不能在语句下面有声明。

int a = 0;

print ("%d", a);

int b = 0; //You can not declare variable here. Some compilers wont allow.
于 2013-10-15T13:55:02.470 回答