• ベストアンサー

getsの部分がとばされてしまう

#include<stdio.h> typedef struct Car{ char name[20]; int num; double gas; }Car; int main(void) { Car car[3]; int i; for(i=0;i<3;i++){ printf("ナンバーを入力してください。\n"); scanf("%d",&car[i].num); printf("車の名前を入力してください。\n"); gets(car[i].name); printf("ガソリン量を入力してください。\n"); scanf("%lf",&car[i].gas); } printf("name\tnumber\tfuel\n"); for(i=0;i<3;i++){ printf("%s\t%d\t%f\n",car[i].name,car[i].num,car[i].gas); } return 0; } …上記のようなプログラムを書いたのですが、実行すると、gets(car[i].name);の部分の処理が飛ばされてしまい、入力することができません。 どのようにしたらよいか、教えていただけませんでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1で指摘されている通りですけど、 scanf("%d\n",&car[i].num); とすることで、scanfに\nを消費させることが一応できます。 私としては、やはり、scanfはやめて fgetsを使って文字入力して sscanfを使う方が良いと思います

mikku_ku
質問者

お礼

ありがとうございます。 scanfの部分をfgetsとsscanfに書き換えたところ、解決することができました。 理由はわかったものの、どのように直したらよいのかよくわからなかったので、助かりました。

その他の回答 (1)

  • fibre102
  • ベストアンサー率20% (6/29)
回答No.1

http://www.kouno.jp/home/c_faq/c12.html の12.18がそれだと思います。

参考URL:
http://www.kouno.jp/home/c_faq/c12.html
mikku_ku
質問者

お礼

ありがとうございました。 何が原因なのかわからず困っていたので、教えていただいたページに描いてあったこと、大変参考になり、助かりました。

関連するQ&A