繁体   English   中英

使用C中文本文件的内容初始化数组

[英]initialising an array with the content of a text file in C

我编写了以下代码,以从文本文件中读取数据并将值存储在数组中。 我的代码未读取文件。

正在使用的库头

#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

fscanf()的使用不正确:

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

更改:

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

至:

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

fscanf()返回成功分配的数量,在这种情况下,应为1 推荐检查输入已成功读取,然后再尝试使用它们。

如果指定"Fly_u.txt"作为文件名,则它必须与进程的工作目录位于同一目录中。 在构造路径时,请记住先保留'\\' ,或者仅使用'/' (在Windows中也可以使用)。

由于数组索引从0N - 1for循环将导致不确定的行为。 因此对于float NumArr[5]; 有效索引为0, 1, 2, 3, 4但两个for循环的终止条件均为i < 6 ,使用5的索引:非法。 增大NumArr的大小或调整for循环的终止条件。

尝试这个

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM