2017-11-15 27 views
0

intまたはfloatのいずれかの10未満の数のファイルを考えてみましょう。私はそれらを読んでアレイに追加したい。Cのファイルからintまたはfloatを読み取る

私が直面してる問題は、私は、例えばだけint型を持っている場合、私はそれも行うことができるということですが、それはfile.data

11 
22 
33.3 
44 
55 

にフロート

に達するたびに、それは物事を台無しに私のコード:

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

void usage(char * message) ; 


int main(int argc, char * argv[]){ 

    //opening the file 
    FILE * flux = fopen("file.data", "r"); 
    if (!flux) usage("error opening the file"); 

    int array[10]; //array to host the data 
    int i=0; 
    int lu; 

    while ((lu = fscanf(flux, "%i", &array[i])) !=EOF && i<10){ 
     printf("lu %i\n", lu); 
     printf("array[%i] %i\n", i, array[i]); 
     printf("\n"); 
     i++; 
    } 

    return 0 ; } 

void usage(char * message) { fprintf(stderr, "%s\n", message) ; exit(1) ;} 

出力:

lu 1 
array[0] 11 

lu 1 
array[1] 22 

lu 1 
array[2] 33 

lu 0 
array[3] 0 

lu 0 
array[4] 4196464 

lu 0 
array[5] 0 

lu 0 
array[6] 4195936 

lu 0 
array[7] 0 

lu 0 
array[8] 904651696 

lu 0 
array[9] 32766 

fscanfを使用して浮動小数点数に達したときにどうやってボグしないようにするには?

(私は...その周りにどのような方法をint型の配列を宣言すると、入力にいくつかのフロートを試してみないと思えることを伝えることができますか?)

編集: 私の目標はにあります私の配列を読み込んでそのインデックスでコンテンツを印刷することができます。例えば、私のデータで:

0. 11 
1. 22 
2. 33.3 
3. 44 
4. 55 
+0

浮動小数点になったらどうしますか?あなたは浮動小数点の丸められた、または 'floor'd int値を保持したいですか? intsを浮動小数点数にしておきたいですか?あなたは整数の配列と浮動小数点の配列を持っていますか? – orip

+0

簡単な答えは: "あなたはこれに' fscanf'を使うことはできません。行を文字列として読み込み、他の手段を使って解析します。エラー検出とともに 'strtol'と' strtod'を使います。 –

+0

問題の見方を再確認してください。ファイルにintまたはfloatがありません。改行で区切られた文字列があります。一度に1行を読み、その内容に基づいて何をしたいのかを決めます。 – Art

答えて

1

整数だけが必要ですか?そうであれば浮動小数点数を読み取って配列に入れる前に整数に変換することができます:

float tmp; 
while ((lu = fscanf(flux, "%f", &tmp)) !=EOF && i<10){ 
    array[i] = (int)tmp; //you could use some rounding here 
    printf("lu %i\n", lu); 
    printf("array[%i] %i\n", i, array[i]); 
    printf("\n"); 
    i++; 
} 
関連する問題