0

ファイルからの入力を受け入れようとしています。このファイルは、整数、タブ、文字列 (スペースを含む場合と含まない場合があります) の順に続く形式です。

例えば:

1\tls -l
2\tls

私は使用してみました:

int   cmd_num;
char command[80];

while (fscanf(ifp, "%d\t%s", &cmd_num, command) != EOF) {
    ...
}

しかし、これはスペースを見たときに失敗しました。何か助けはありますか?

4

2 に答える 2

1

文字列を読み取るには、おそらくスキャンセットを使用する必要があります。

if (fscanf(fp, "%d\t%79[^\n]\n", &cmd_num, command) != 2)
    ...error handling...
else
    ...use cmd_num and command...

バッファ オーバーフローを防ぐために、フォーマット文字列のサイズ制限に注意してください。

また、改行が一致するかどうかわからないことにも注意してください。を使用して行全体 (または)fgets()を読み取り、代わりに;を使用する方がよい場合があります。少なくとも、改行が収集されたかどうかはわかります (必要に応じて、改行を取得できます)。getline()sscanf()fscanf()

于 2012-11-02T05:24:11.987 に答える
0

関数でこれを試してくださいfscanf

fscanf(fp,"%d\t%[^\n]s",&cmd_num,command);

これは確かにうまくいきます...

于 2012-11-02T06:27:59.370 に答える