我正在解决使用文件中的字符填充数组的问题。我想做的是
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)++;
}
答案 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);
}