いまさら原因発見。でメモしてみる。
昔の宿題
で「Enterが残ってるのかしらん。」っていっていたのはどうやら正しかった模様。
手元のC言語の入門書より。
●改行文字が残る。
scanf()で正しく入力しても最後の改行文字はバッファの中に残ります。そのためおかしな動作になることがあります。
結局scanf()で文字列を受け取るようにして、文字列の最初の文字で判断するようにして解決しました。文字列にすることで改行文字も文字列に収まり、ループが2回回ることがなくなったみたいです。
今回は文字を読み込むだけだったので、文字列で一緒くたに受け取ることができたけど、数字を読み込む場合はすべて文字列で受け取るのではなくて、数字を読み込む。その後の文字は読み捨てる。というようにする必要があるみたいです。
手元のC言語の入門書より。
scanf()で正しく入力しても最後の改行文字はバッファの中に残ります。そのためおかしな動作になることがあります。
- 林 晴比古 新・C言語入門 シニア編 pp335
結局scanf()で文字列を受け取るようにして、文字列の最初の文字で判断するようにして解決しました。文字列にすることで改行文字も文字列に収まり、ループが2回回ることがなくなったみたいです。
今回は文字を読み込むだけだったので、文字列で一緒くたに受け取ることができたけど、数字を読み込む場合はすべて文字列で受け取るのではなくて、数字を読み込む。その後の文字は読み捨てる。というようにする必要があるみたいです。
int a;めもめも。
char dmyss[80];
scanf("%d", &a);
gets(dmyss);