Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用if语句中定义的变量_C_If Statement_Scope - Fatal编程技术网

C 使用if语句中定义的变量

C 使用if语句中定义的变量,c,if-statement,scope,C,If Statement,Scope,我正在制作一个程序,逐行处理一个文本文件,但是文件的第一行是一个int,它告诉我文件头有多少行。问题是,我正试图定义一个数组来存储关于文件其余部分的信息,但我在city_info和city_dist上不断得到一个未定义的错误。知道我遗漏了什么吗 代码如下: while(fgets(buffer,MAX_LINE,fp)!=NULL) { if(firsttime){ int num_city = atoi(buffer); printf("NUMB

我正在制作一个程序,逐行处理一个文本文件,但是文件的第一行是一个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)

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

在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);

您不能在下面的语句中声明

int a = 0;

print ("%d", a);

int b = 0; //You can not declare variable here. Some compilers wont allow.

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

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


请记住,在您的示例中,变量num_city、city_info[num_city]和city_dist[num_city]具有块作用域,您不能在if作用域之外访问它们,因为它对其他作用域不可见。此外,city_info[num_city]和city_dist[num_city]是仅C99支持的可变长度数组。

错误消息是什么?请养成习惯,始终复制整个编译错误。每个人都会更清楚地知道问题是什么,你会得到更好的答案。@jon;不,C99提供了一个可以在别处声明的功能。这不是一个错误。这是一个警告,说明您没有在任何地方使用该变量。@haccks:好吧,如果没有看到任何错误消息,您只能猜测它们是在后面编辑的。好像我猜错了。取决于你的编译器版本和标准号。它对C99完全有效。很抱歉,我还在学习C,在定义了num_city之后,city_info和city_dist是否会被定义为size?i、 e.如果我没有给num_city一个值,这会打破吗?你是在C89模式下编译程序的吗?你是对的。您需要动态分配缓冲区。阅读malloc和freeYou真正的问题是,您不知道编译时数组的大小。您不能静态地分配它们。@EricSchaefer;真正的问题是,您不知道编译时数组的大小:我认为这不是真正的问题