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ます%fint
  • のアドレスではなく、のアドレスをfloat渡す必要がありますfloat*float

変化する:

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

に:

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

fscanf()成功した割り当ての数を返します。この場合は、である必要があります1。後で使用する前に、入力が正常に読み取られたことを確認することをお勧めします。

"Fly_u.txt"ファイル名として指定する場合は、プロセスの作業ディレクトリと同じディレクトリにある必要があります。'\'パスを作成するときはエスケープするか、単に使用することを忘れないでください'/'(これはWindowsでも機能します)。

配列インデックスがからに実行されると、forループは未定義の動作になります。したがって、有効なインデックスはですが、両方のループの終了条件は、 :illegalのインデックスを使用することです。ループのサイズを大きくするか、ループの終了条件を調整します。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 に答える