0

ここで fgets に関する他の同様の問題を見てきましたが、それらはすべて (f)scanf によって引き起こされているようです。私が直面している問題には、(f)scanf は関係ありません。

これは、stdin を 1 行ずつ読み取るために使用している while ループです。

while(fgets(line,sizeof(line),stdin)!=NULL){
            char* newLine[6]; //the array of characters
            int i = 0; //counter

            char *next=strtok(line," ");
            while (i<6){
                newLine[i]=next;
                next=strtok(NULL," ");
                ++i;
            }

line は間違いなく入力を保持するのに十分な大きさです。単語数が正確にわかっているので、6 を使用します。2 番目の while ループはスペースを削除し、結果を newLine に入れて評価します。これは、最初の行を除くすべての行で機能します。これが出力です。

A 344532111 S SPY 300 117.880000 //ignore input
A 344532111 S SPY 300 117.880000 //line 2
R 344532111 SPY 300 117.840000   //line 3
T 344532111 SPY 100              //line 4
C 344532111 SPY 100              //line 5
A 344533172 B SPY 200 117.110000 //line 6
A 344533348 B SPY 280 118.050000 //line 7       
X 344533348 SPY                  //line 8
344532111 S 100 117.840000 //results
344533172 B 200 117.110000 //results

Aで始まる各行の結果があるはずです。最初の行が読み取られないことはわかっています。各行で見つかった最初の文字を出力すると、「A」が1つしか表示されないためです。さらに、行はあたかも存在しないかのようにエラーをスローします。(各行は、その前の行に基づいて異なる機能を開始するコマンドのように機能します。最初の行を読み取ってもエラーは発生しません。最初の 2 行が重複しているのはそのためです。)

問題は、端末に入力された最初の行をスキップすることですが、それ以降は期待どおりにすべてを読み取ります。

私が間違っている可能性があることについて誰かが知っていますか? もしかして使い方fgets()間違ってる?

ありがとうございました

4

0 に答える 0