2017-10-01 17 views
2

私はいくつかの基本的なC.Cでスペース区切りの値を読み取る方法は?

を学ぶために使用しています.txtファイルは、ここでtxtファイルされます:

8 
12 48 15 65 16 82 9 72 

ここでは私のCプログラムである:

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



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

     char num = 0; 
     //int[] arr = 0; 


     if (argc != 2){ 
       return 0; 
     } 

     FILE *inputFile = fopen(argv[1], "r"); 

     if (inputFile == NULL){ 
       printf("Error1\n"); 
       return 0; 
     } 

     while(!feof(inputFile)){ 
       num = fgetc(inputFile); 
       printf("%c\n",num); 
     } 

     if(!feof(inputFile)){ 
       printf("error"); 
       return 0; 
     } 

} 

私の目標最初の行の値の量に基づいて2行目の配列を取得します....本質的には、{12、48、....}を格納する8個の値を持つ配列が必要です

+0

いつでも 'sscanf'を使うことができます。 – tadman

+1

「なぜwhile(!feof(file))」が常に間違っているのですか?](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong) char num'は 'int num'でなければなりません。あなたの家庭教師を責める。 –

+0

'fscanf'に' malloc'を指定してください。 [this](https://ideone.com/KKK4dd)のように – BLUEPIXY

答えて

3

整数を読み取るのに間違った関数を使用しています:intを返しても、関数fgetcが個々の文字(why getchar returns an int?)を読み込んでいます。

あなたはファイルの終わりに達していることを決定するために、スペースで区切られた整数を読み込む代わりにfscanfを使用し、戻り値をチェックするために:

int n; 
while (fscanf(inputFile, " %d", &n) == 1) { 
    printf("%d\n", n); 
} 

注上記のループを検出するためのfeofを使用して回避していることファイル条件の終わり(why using feof is wrong?

1

あなたは数字(何もない)のシリーズを読むことを目指す場合は、次のようにかかわらず、間に改行の数の、あなたは、単にfscanfを使用することができます。

fscanf戻り値の数が正常にフォーマット指定に従って読み込むこと
int num; 
    while(fscanf(inputFile, "%d", &num) == 1) { 
      printf("%d\n",num); 
    } 

ノート、すなわちそれは限り積分値は(他と0)で読み取ることができたとして1を返します。

関連する問題