• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MacでC言語を勉強しています)

MacでC言語を勉強しています

このQ&Aのポイント
  • MacでC言語を勉強する際に困っている問題があります。
  • Xcodeを使ってCが使えるようになり、プログラミングを行っています。
  • しかし、第8章の総合理解度チェックの問題でエラーが発生しています。具体的には、図書カードカタログプログラムの入力部分で空白行を入力できずにエラーが起きてしまいます。解決策を教えてください。

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

  • ベストアンサー
  • sevenless
  • ベストアンサー率66% (374/561)
回答No.2

訂正です。gets() は警告は出ますが実行できるようですね。 で、本題については、scanf("%d", &i); に対して 1(リターン)と入力した時に、1 は i に渡されますが、(リターン)がキーボードバッファに残ったままになっているのが原因です。そのため、次に gets() で入力を求められた時に自動的に(リターン)が入力されてしまうわけです。 従って、scanf("%d", &i); の代わりに scanf("%d%*c", &i); を使えば解決します。

chibi_008
質問者

お礼

出来ました!! なるほど・・・、入力をそうやると処理できるわけですか・・・。 sevenlessさん、本当にいつもありがとうございます!! 独習しているとこういった泥沼は本当に難しいので、とても助かっています。 ありがとうございます。

その他の回答 (1)

  • sevenless
  • ベストアンサー率66% (374/561)
回答No.1

gets() 関数にはバグがあり、バッファオーバーフローを意図的に引き起こすセキュリティホールとして度々狙われてきました。そのため、デフォルトでは実行できなくしてあります。代わりに fgets() 関数を使ってください。 詳しくは man gets してください。

関連するQ&A