C 使用if语句中定义的变量
我正在制作一个程序,逐行处理一个文本文件,但是文件的第一行是一个int,它告诉我文件头有多少行。问题是,我正试图定义一个数组来存储关于文件其余部分的信息,但我在city_info和city_dist上不断得到一个未定义的错误。知道我遗漏了什么吗 代码如下: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
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;真正的问题是,您不知道编译时数组的大小:我认为这不是真正的问题