9

私は C を学習している初心者で、オンライン講義から次のコードを理解しようとしています。文字列をスキャンして整数を探します。文字が検出されると、sscanf は失敗します。

int n; char c;
if (sscanf(string, " %d %c", &n, &c) == 1)
    //return the integer

else
    // fail

sscanf のマニュアル ページを読みましたが、戻り値のチェックとこのコードが機能する理由についてまだ混乱しています。「これらの関数は、割り当てられた入力項目の数を返します」と述べています。

sscanf が文字のみに遭遇した場合、それらは &c... に書き込まれますが、その場合 &n には書き込まれません。この場合、sscanf の戻り値は 1 のままだと思いますか?

4

3 に答える 3

6

あなたは、、、またはをsscanf(string, " %d %c")返します:EOF012

2
: 入力が次の[任意のスペース][10 進数1 ][任意のスペース][任意の文字][次のデータが読み取られない]に一致する場合

1: 入力が上記で失敗したが、次の
[オプションのスペース][10 進数1 ][オプションのスペース][利用可能なデータがありません]と一致した場合

0: 空白とオプションの記号の後の入力で数字が見つからなかった場合: 例:"z"または"-".

EOF: 入力が空""または空白のみの場合2 .


1 10 進数字の前に 1 つの符号文字+または-.

2またはまれな入力エラー。

于 2013-05-27T19:56:37.360 に答える
2

printf以下のようなステートメントに関数を入れることで、関数が返すものをいつでも確認できます。

printf("%d",sscanf(string, " %d %c", &n, &c));

sscanf端末にの戻り値を出力することで、疑問が解消されるでしょう。

また、これをチェックすることもできます: cplusplus : sscanf

お役に立てば幸いです:)

于 2013-05-27T19:55:15.790 に答える