我正在读取文件并将信息放入数组中供以后使用。 我必须打开然后阅读并关闭。
我完成了前3件事,但效果很好。但我对如何推进下一部分感到难过。我怎么知道什么时候到达文件的末尾。我知道这个是多久,因为我做到了。但如果我要运行一个未知文件,我不知道其中有多少。
我现在的主要问题是我有一个字符串表示我需要阅读的最后一个文件。它会这样做,但它返回它从文件中提取的最后一个。将2d数组用于字符串是好的,我将如何做到这一点。
int main(void)
{
FILE * pFile;
char buf[40];
int x[80];
float y[80];
int z[80];
char str[40];
pFile = fopen("testint.dat", "r");
if (pFile != NULL)
{
int i = 0;
for ( i = 0; i < 5; i++)
{
fgets(buf, 40, pFile);
x[i] = atoi(buf);
fgets(buf, 40, pFile);
y[i] = atof(buf);
fgets(buf, 40, pFile);
z[i] = buf[0];
fgets(str, 40, pFile);
str[strlen(str) - 1] = '\0';
printf("\n %s \n", str);
printf("\n %i \n", x[i]);
printf("\n %f \n", y[i]);
printf("\n %c \n", z[i]);
}
}
printf("\n\n %s \n", str);
printf(" %i \n", x[0]);
printf(" %f \n", y[1]);
printf(" %c \n", z[2]);
system("pause");
}
这里也是文件信息:
1
1.1
a
aaaa
2
2.2
b
bbbb
3
3.3
c
cccc
4
4.4
d
dddd
5
5.5
e
eeee
注意:到目前为止,代码没有返回错误。这更像是我如何进行的问题。 (也有人能帮助我,我欠你一杯啤酒)
答案 0 :(得分:3)
但如果我要运行一个未知档案,我就不知道其中有多少档。
替换
int i = 0;
for ( i = 0; i < 5; i++)
{
fgets(buf, 40, pFile);
x[i] = atoi(buf);
fgets(buf, 40, pFile);
y[i] = atof(buf);
fgets(buf, 40, pFile);
z[i] = buf[0];
fgets(str, 40, pFile);
str[strlen(str) - 1] = '\0';
printf("\n %s \n", str);
printf("\n %i \n", x[i]);
printf("\n %f \n", y[i]);
printf("\n %c \n", z[i]);
}
与
int i = 0;
while (fgets(buf, 40, pFile))
{
x[i] = atoi(buf);
fgets(buf, 40, pFile);
y[i] = atof(buf);
fgets(buf, 40, pFile);
z[i] = buf[0];
fgets(str, 40, pFile);
str[strlen(str) - 1] = '\0';
printf("\n %s \n", str);
printf("\n %i \n", x[i]);
printf("\n %f \n", y[i]);
printf("\n %c \n", z[i]);
i++;
}
避免使用像40
这样的幻数,使用sizeof(buf)
答案 1 :(得分:1)
关于何时到达文件末尾的问题,有一个函数可以命名&#39;文件末尾&#39;简而言之,EOF是一个很好的例子: