私は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だと思いましたか?
Sscanfが%d
を正常に読み取り、他に何も読み取らなかった場合、1
を返します(1つのパラメーターが割り当てられています)。数字の前に文字がある場合は、0
を返します(存在しない整数を最初に見つける必要があるため、パラメーターは割り当てられませんでした)。追加の文字を含む整数がある場合、両方のパラメーターを割り当てることができたため、2
が返されます。
sscanf(string, " %d %c")
はEOF
、0
、1
または2
を返します。
2
:入力が以下に一致する場合
[オプションのスペース] [10進数*] [オプションのスペース] [任意の文字] [余分な無視]
1
:入力が上記で失敗したが、以下と一致した場合
[オプションのスペース] [10進数*] [オプションのスペース] [これ以上データなし]
[補正]0
:入力で、空白とオプションの記号の後に数字が見つからなかった場合:例:"z"
または"-"
。
EOF
:入力が空の場合""
または空白のみ。
+
または-
を付けることができます。以下のようにprintf
ステートメントに関数を入れることで、関数が何を返すかをいつでも確認できます。
printf("%d",sscanf(string, " %d %c", &n, &c));
これはおそらく、端末にsscanf
の戻り値を出力することで、疑問を解消するでしょう。
また、これをチェックすることができます: cplusplus:sscanf
それが役に立ったことを願っています:)