2017-10-03 18 views
0

2次元配列をコンマで区切った整数で埋めようとしています。 私はすでに3x3配列のためのスペースを割り当てています。今、入力テキストの各行をループして整数を取得し、配列に配置しようとしています。ここでC、文字列をトークン化して2D配列を塗りつぶし

は、私がこれまで持っているものです。

char currLine[257]; 
    char *token; 

    for(int i = 0; i < size; i++){ 

     fgets(currLine, 257, inputFile); 

     for(int j = 0; j < size; j++){ 

     } 
} 

次のようにテキストをフォーマットする:

9,8,7 
2,1,6 
3,4,5 

私が正常に各行をつかむことができますが、そこから私はトラブルに実行し続けます。私が各番号を取得した後、私はもちろんそれが配列の[i] [j]の場所に入ることを望みます。したがって、最初の行は[0]に対応し、最初の値は[0] [0]に対応します。

+2

のですか? 'sscanf(currLine、%d、%d、%d、&matrix [i] [0]、&matrix [i] [1]、&matrix [i] [2]); '3'を返すことを確認してください。また、 'fgets()'が何かを読んだことなど、 'fgets()'の直後に 'if(!feof(inputFile))'を使用したり、 'fgets() 'はNULLを返しません。 –

+0

これを試してみます。しかし、私はsscanfがどのようにフォーマットされているかに精通していません。 – dj1121

+0

まあまあです[ドキュメントを読む](http://man7.org/linux/man-pages/man3/scanf.3.html) –

答えて

0

入力した書式付きテキストをトークン化するのは簡単です。次のコードを見てください。フロート番号をターゲットにしている場合は、コードを変更することができます。私のコードでは、私は整数を仮定しています。

#include <stdio.h> 
#include <string.h> /* strlen() & memset() */ 
#include <stdlib.h> /* atoi() */ 

void getNumbers(const char* ch, int *a, int *b, int *c) 
{ 
    int i; 
    int size = strlen(ch) + 1; 
    char ar[100]; 
    int n[3]; 

    int j = 0; 
    int k = 0; 


    for(i = 0; i < size; ++i){ 
     if(ch[i] != ',') 
      ar[j++] = ch[i]; 

     if (ch[i] == ',' || i == size-1) { 
      ar[j] = '\0'; 
      n[k++] = atoi(ar); 
      memset(ar, 0, sizeof(ar)); 
      j = 0; 
     } 

    } 

    *a = n[0]; 
    *b = n[1]; 
    *c = n[2]; 

} 

int main() 
{ 
    char *num = "1256,524,765"; 
    int n1,n2,n3; 

    getNumbers(num,&n1, &n2, &n3); 
    printf("%d %d %d\n", n1,n2,n3); 

    return 0; 
} 

結果はどう `のsscanf()`について

1256 524 765 
関連する問題