为什么我不能在IF-Else中声明char数组?

时间:2014-01-26 07:13:20

标签: c arrays if-statement char declaration

我试图在if-else中给出Char数组的大小,具体取决于文件中的行数。但是当我之后尝试使用它时,它会出错:“array unclared”

FILE *f=fopen("G:\\workspaceC\\small1.txt","r");

while((c=fgetc(f))!=EOF)
{
    if(c=='\n')
        no_of_lines++;
}
printf("no_of_lines:  %d",no_of_lines);
int fclose(FILE *f);

if(no_of_lines<10){
    char b[30];
}
else if(no_of_lines>10 && no_of_lines<15){
    char b[60];
}
else{
    char b[106];
}

 for(z=0;z<size;z++)
    {
        if(c==b[z])  ///////Here it gives error: "b undeclared"
        {
            flag=1;
            break;
        }
    }

4 个答案:

答案 0 :(得分:2)

if块中声明的数组将在块中变为本地。在技​​术术语中,其范围仅限于if块。这就是你得到错误的原因。将声明移到块外。

但是还有更多问题:

  1. 您首先阅读整个文件以确定行数并丢弃您阅读的所有数据。
  2. 您在哪里初始化数组内容?因此,你最终会遇到问题。
  3. 因此,更好的方法是首先使用文件API查找文件大小,为此动态分配空间,将内容读入动态分配的空间并适当处理数据。

答案 1 :(得分:2)

您已在if块中声明了数组 b 。因此,只有if块可见。并且,它在if块之外无法看到。

如果您按照以下方式更改代码,您将实现您想要的目标。

int size;
if(no_of_lines<10){
    size = 30;
}
else if(no_of_lines>10 && no_of_lines<15){
    size = 60;
}
else{
    size = 106;
}
char b[size];

答案 2 :(得分:1)

---->IF-ELSE语句中,分配内存而不是声明数组。

  1. char * arr
  2. malloc((sizeof(char)*30/60/106)

答案 3 :(得分:0)

您在块代码{}中声明了您的数组。无论此块是否在if语句中,您只能在此块中访问此数组。

如果要动态更改数组的大小,请在函数开头的指针上声明,然后为其动态分配内存(例如,使用malloc)。但是,似乎在你的情况下,你可以在数组上声明并给它你需要的最大尺寸。