写入数组直到它满了

时间:2014-11-17 14:37:06

标签: c arrays while-loop

我正在解决使用文件中的字符填充数组的问题。我想做的是 z = getc(fp)应该写入数组,直到文件中没有字符或者如果字符数多于数组大小,它应该填充数组并忽略文件中的其余字符。 当我运行此代码时,它立即终止。我有z = getc(fp) != EOF但是当MAX表示有更多字符时它会超出数组大小。

不过,我已经搜索了相关主题,但没有任何接近它。所以请耐心等待。

//MAX is set to 1000

    while( (z = getc(fp)) != '\n' || (z = getc(fp)) < MAX)
            {
                pole[*i] = z;
                (*i)++;
            }

3 个答案:

答案 0 :(得分:1)

您有两个终端条件:

  • i >= MAX(或i < MAX
  • 时终止
  • feof(fp)(或!feof(fp)
  • 时终止

在满足第一个第二个条件时终止。

首先第二个条件符合。

所以你想继续这两个&#34;第二个&#34;满足。因此i < MAX && !feof(fp)

z = getch(fp);
*i = 0;
while(*i < MAX && !feof(fp)){
    pole[*i] = z;
    (*i)++;
    z = getch(fp);
}

或者如评论中所建议的那样,您也可以这样做:

*i = 0;
while ((z = fgetc(fp)) != EOF && *i < MAX){
    pole[*i] = z;
    (*i)++;
}

这将删除重复的z = fgetc(fp)调用,并且更紧凑。

答案 1 :(得分:0)

你的循环现在正在检查getc(fp)是否与&#39; \ n&#39;不同。只要它与&#39; \ n&#39;不同,它就永远不会检查while while concond的第二部分。

正确处理这个问题的方法,如果我明白你想要做什么就是

i = 0
z = getc(fp)
while (z != '\n' && i < MAX)
 {
    pole[i] = z
    i++
    z = getc(fp)
 }

答案 2 :(得分:0)

假设你真的可以使用\n来检测文件的结尾,并且你的数组有MAX个元素:

 z = getc(fp);
 while( (z != '\n') && (*i < MAX) )
    {
        pole[*i] = z;
        (*i)++;
        z = getc(fp);
    }
相关问题