3

現在、テキスト ファイルから文字列と数値データを抽出する必要がある C++ プログラムを作成しています。データの形式は次のとおりです。

3225 C9+     ELECTR  C8      C        *      1.00E-6  -0.30       0.0

最初のエントリは整数、次の 5 つのエントリは文字列、最後の 3 つのエントリは浮動小数です。文字列の長さが 7 文字を超えることはありません。

ファイルを 1 行ずつ読み取ってから、次を使用してデータを抽出しています。

sscanf(ln.c_str(),"%d  %s  %s  %s  %s  %s  %e  %e  %e",
&rref[numre],&names[numre][0],&names[numre][1],&names[numre][2],&names[numre][3],
&names[numre][4],&nums[numre][0],&nums[numre][1],&nums[numre][2]);

これは、次のような行に遭遇するまで正常に機能します。

  3098 SIC2H3+ ELECTR  SIC2H2  H        *      1.50E-7  -0.50       0.0

ここで、エントリの 1 つは完全な 7 文字の長さです。この場合、私は得る;

names[3097][0] = "SIC2H3+ELECTR"

と、

names[3097][1] = "ELECTR"

誰でもアイデアを得ることができます...彼らは大歓迎です!!

4

1 に答える 1

6

最も可能性の高い問題は、 の宣言にありnamesます。7 文字以下を保持すると宣言し、ゼロを終了するためのスペースを割り当てるのを忘れた場合、説明している結果が得られます。

char names[MAX][4][7]

長さ 6 以下の文字列に十分なスペースがあります。長さ 7 の文字列の場合は、

char names[MAX][4][8]
于 2012-08-01T22:36:04.927 に答える