• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 sscanf関数で変換に失敗した場合)

C言語のsscanf関数で変換に失敗した場合について

このQ&Aのポイント
  • C言語のsscanf関数を使用して変換に失敗した場合について質問です。
  • 入力された整数の2乗を返すプログラムで、sscanf関数が変換エラーの場合の扱いについて疑問があります。
  • 変換エラーがどのようなものか理解できず、エラーが発生すると再入力を促されることもあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>変換エラーというのは、入力された値とsscanf関数で指定した書式が異なる場合は含まないのでしょうか。 含みません。 Linuxでの例になりますが http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/scanf.3.html のエラーの欄に書いてあるようなものです。

jet888
質問者

補足

回答ありがとうございます。 上記のサイトの返り値のところで、 「最初に一致の失敗があった場合には 0 になることもある。 最初の変換が成功する前に入力の最後に達して、一致の失敗が起こった場合には、 EOF が返される。」 とあります。 今回の場合は、最初に一致の失敗となるため返り値が「0」になるということだと思いますが、 「最初の変換が成功する前に入力の最後に達して」という部分との違いがよくわかりません。 入力した値はすでにlinebuf変数に格納されているため、 入力の最後に達しているということにはならないのでしょうか。

その他の回答 (11)

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.1

うちのコンパイラはEOFでいけます aを入力すると、「0の2乗は0です。」 mac10.10、Xcodeです Winに放り込んだどこぞのコンパイラと CygwinとmacのXcodeだと挙動が変わります

jet888
質問者

お礼

回答ありがとうございます。 コンパイラはMinGWです。 コンパイラによって挙動が異なるのですね。 MinGWの場合、EOFではなく0でなければうまくいかないようです。

jet888
質問者

補足

#3さんの御礼コメントに記載させていただきましたが、 コンパイラに関わらず、この場合のsscanf関数の返り値は「0」ですが、 「EOF」とした場合でも整数を入力した場合はその整数の2乗の値が出力され、 整数以外を入力した場合でも「(無関係な数値)の2乗は・・・です。」と出力することはできるという意味だったんですね。 誤解しておりましたので、訂正させていただきます。

関連するQ&A