1

我编写了下面的代码来从文本文件中读取数据并将值存储在数组中。我的代码没有读取文件。

正在使用的库头文件

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>

我的主要

int main()
{   
FILE *fpoo;
float NumArr[5];

//我同样尝试过“c:\Fly_u.txt”

fpoo= fopen ("Fly_u.txt","r");
if(fpoo!=NULL)

    for (int i=0;i<6;i++)
    {
        fscanf(fpoo,"%d\n",NumArr[i]);
    {
else
{
    printf("me");

}
for (int i=0;i<6;i++)
{
    printf("%f",NumArr[i]);
}


fclose(fpoo);
_getche();
return 0;
}

//文本文件内容如下

0.99247
0.14727
-0.00041387
-1.737
0.20475
-0.052151
0.14755
-0.0233
-0.32606
0.092085
0.059199
-0.025587
0.0097565
0.13639
0.12007
4

3 回答 3

7

使用fscanf()不正确:

  • 您需要使用格式说明符,float%f不是int
  • 您需要传递 a float(即 a float*)的地址,而不是 afloat

改变:

fscanf(fpoo,"%d\n",NumArr[i]);

至:

fscanf(fpoo,"%f\n", &NumArr[i]);

fscanf()返回成功分配的数量,在这种情况下应该是1. 建议在稍后尝试使用它们之前检查输入是否已成功读取。

如果指定"Fly_u.txt"为文件名,则它必须与进程的工作目录位于同一目录中。记住'\'在构建路径时要转义,或者只是使用'/'(这也适用于 Windows)。

当数组索引从tofor运行时,循环将导致未定义的行为。因此,对于有效索引,但两个循环的终止条件是使用索引:非法。增加循环的大小或调整循环的终止条件。0N - 1float NumArr[5];0, 1, 2, 3, 4fori < 65NumArrfor

于 2012-08-11T21:30:02.070 回答
2

尝试这个

fscanf(fpoo,"%f\n",&NumArr[i]);
              ^    ^
              ^    ^

也就是说,传递要存储数据的变量的地址。请注意,%f而不是%d也。

您没有指定问题,但是如果您在返回时遇到问题,fopen请检查您的文件路径并尝试将完整路径传递给您的文件。正如@hmjd 所说,您现在所做的假设该文件与您的可执行文件存在于同一位置。

于 2012-08-11T21:29:32.447 回答
0

'我同样尝试过 "c:\Fly_u.txt"' 这是错误的,因为 \ 在 C 字符串中具有特殊含义。你应该使用的是"c:\\Fly_u.txt".

于 2012-08-11T21:29:44.817 回答