-4

该代码看起来与之前的分配几乎相同,但它无法编译。

问题似乎在while(feof!(in))

错误:在 '!' 之前应为 ')' 令牌

代码:

#include <stdio.h>

int main (void)
{
    int water_arr[30],monthnum=0;

    FILE* in;
    in = fopen ("water.txt","r");

    while (feof! (in))
        {
            fscanf(in, "%d", &water_arr[monthnum]);
            monthnum = monthnum + 1;
        }

    for (monthnum = 0; monthnum < 30; monthnum++)
        {
            printf("%d",water_arr[monthnum]);
        }

    return (0);
}
4

1 回答 1

0

你其实想要

while (!feof(in))

代替

while (feof! (in))

那也是错误的。看看为什么while ( !feof (file) )总是错的?知道为什么它是错误的。

相反,正确的方法是使用返回值fscanf作为条件。根据 C11 标准,

7.21.6.2 fscanf 函数

[...]

  1. 如果在第一次转换(如果有)完成之前发生输入错误,则该fscanf函数返回宏的值。EOF否则,该函数返回分配的输入项的数量,如果发生早期匹配失败,该数量可能少于提供的数量,甚至为零。

因此,在您的情况下,fscanf如果成功,将返回 1。因此,使用

while(fscanf(in, "%d", &water_arr[monthnum])==1)

fscanf并从此循环的主体中删除。为防止数组溢出,请使用

while(monthnum<30 && fscanf(in, "%d", &water_arr[monthnum])==1)

还有另一个问题。由于water_arr是本地非数组staticint因此不会自动初始化。您从文件中读取数据后,打印整个数组。如果读取的整数数小于 30,这将导致未定义行为。您应该使用不同的变量并打印数组索引,直到该变量等于monthnum。喜欢:

int i;
for(i=0 ; i<monthnum ; i++)
    printf("%d",water_arr[i]);

代替

for (monthnum = 0; monthnum < 30; monthnum++)
{
    printf("%d",water_arr[monthnum]);
}
于 2015-04-13T11:37:42.897 回答