0

理解できない次のscanfコードがあります::

char board[3][3];
int i;
for(i=0;i<3;i++) 
scanf("%s[^\n]%*c", board[i]);

scanf 構文の文字の意味を単語ごとに理解するのを手伝ってください。ありがとうございました。

4

2 に答える 2

3

非空白文字のシーケンスを読み取り、次に"[^"、改行、"]"、そしてどこにも格納されていないもう 1 つの文字を読み取ります。これは実際に必要なものではないと思います。正しい構文については、scanf マンページ (google it) を参照してください。

説明:

%s- 非空白文字のシーケンスをキャプチャ

%[- セットによって決定される一連の文字をキャプチャ (']' で終わる)

それ%s[^\n]が私には間違っているように見える理由です。代わりにする必要があり%[^\n]ます。

于 2012-12-25T04:38:50.397 に答える
1

私の知る限り、

これが行うことは、(for ループ内で) 3 回、改行文字 ([^\n] を使用) に遭遇するまで (%s を使用して) 行を読み取り、最後の (改行) 文字 (%*c を使用) を破棄することです。 .

%*c

ここで、"*" は "c" によってキャッチされた値を保存しないように scanf に指示します。つまり、改行文字です。

于 2012-12-25T06:17:10.673 に答える