- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 sscanf関数で変換に失敗した場合)
C言語のsscanf関数で変換に失敗した場合について
このQ&Aのポイント
- C言語のsscanf関数を使用して変換に失敗した場合について質問です。
- 入力された整数の2乗を返すプログラムで、sscanf関数が変換エラーの場合の扱いについて疑問があります。
- 変換エラーがどのようなものか理解できず、エラーが発生すると再入力を促されることもあります。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
>変換エラーというのは、入力された値とsscanf関数で指定した書式が異なる場合は含まないのでしょうか。 含みません。 Linuxでの例になりますが http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/scanf.3.html のエラーの欄に書いてあるようなものです。
その他の回答 (11)
- Wap58
- ベストアンサー率33% (29/87)
回答No.1
うちのコンパイラはEOFでいけます aを入力すると、「0の2乗は0です。」 mac10.10、Xcodeです Winに放り込んだどこぞのコンパイラと CygwinとmacのXcodeだと挙動が変わります
質問者
お礼
回答ありがとうございます。 コンパイラはMinGWです。 コンパイラによって挙動が異なるのですね。 MinGWの場合、EOFではなく0でなければうまくいかないようです。
質問者
補足
#3さんの御礼コメントに記載させていただきましたが、 コンパイラに関わらず、この場合のsscanf関数の返り値は「0」ですが、 「EOF」とした場合でも整数を入力した場合はその整数の2乗の値が出力され、 整数以外を入力した場合でも「(無関係な数値)の2乗は・・・です。」と出力することはできるという意味だったんですね。 誤解しておりましたので、訂正させていただきます。
- 1
- 2
補足
回答ありがとうございます。 上記のサイトの返り値のところで、 「最初に一致の失敗があった場合には 0 になることもある。 最初の変換が成功する前に入力の最後に達して、一致の失敗が起こった場合には、 EOF が返される。」 とあります。 今回の場合は、最初に一致の失敗となるため返り値が「0」になるということだと思いますが、 「最初の変換が成功する前に入力の最後に達して」という部分との違いがよくわかりません。 入力した値はすでにlinebuf変数に格納されているため、 入力の最後に達しているということにはならないのでしょうか。