【问题标题】:initialising an array with the content of a text file in C用 C 中的文本文件的内容初始化一个数组
【发布时间】:2012-08-08 16:59:07
【问题描述】:

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

正在使用的库头

#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

【问题讨论】:

  • 我认为 c++ 标签在这里不适用。
  • 在一个 20 行的程序中,您使用了一个 C++ 特性,即在 for 循环中声明变量 i。如果这是您想要的编程方式,那么开始学习 C 而不是 C++ 可能会更好。
  • @jahhaj:C99 允许在函数中(相对)任意位置声明变量,因此即使这样也不适用。这是C
  • @EdS。虽然这是正确的(而且它并不是最近的发展,因为它自 99 年以来已经有一段时间了;当时甚至还没有发布一些现在流行的语言!),visual-c++ 标记使事情变得有点复杂,因为微软的 C编译器严格仅限 C89 (AFAIK)。所以 OP 可能不得不在 C++ 模式下运行编译器。
  • @eq-: 是的,VS 只实现了 C89,这一直是我沮丧的根源……

标签: c++ c arrays visual-c++


【解决方案1】:

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)。

for 循环将导致未定义的行为,因为数组索引从 0 运行到 N - 1。所以对于float NumArr[5];,有效索引是0, 1, 2, 3, 4,但是for 循环的终止条件是i &lt; 6,它使用5 的索引:非法。要么增加NumArr 的大小,要么调整for 循环的终止条件。

【讨论】:

    【解决方案2】:

    试试这个

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-25
        • 1970-01-01
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多