プロが教える店舗&オフィスのセキュリティ対策術

C言語 while文 無限ループ 不可解?


以下のようなプログラム

char a[10];

while (1){
printf("type");
gets(a);

if(a[0]=='e') break;
else if(a[0]=='l') printf("o");
else if(a[0]=='a') printf("s");
else if(a[0]=='s') printf("i");
else printf("no");
}

このプログラムを実行すると、初回ループ後に
type no (←おそらく2ループ目)
と表示され、その後次のループが正常に動き、そのループ後、再び
type no
と表示されます。(これの繰り返し)

どこが問題なのかわかる方いましたら回答よろしくお願いします。

質問者からの補足コメント

  • 改行の¥n書き忘れてましたのでprintfには改行が入ってるものとして下さい。
    typeと表示されるので、例えば i と入力します。すると、以下のように

    type
    i
    o
    type no
    type

    となり、入力待ちの状態になります。
    再び

      補足日時:2017/01/26 17:44
  • 補足のiはlですね。

      補足日時:2017/01/26 17:46

A 回答 (5件)

完全なプログラムが書かれていないのでなんとも言えんのだけど, とりあえず手元でてきとうに補った



#include <stdio.h>
int main()
{
char a[10];

while (1){
printf("type");
gets(a);

if(a[0]=='e') break;
else if(a[0]=='l') printf("o\n");
else if(a[0]=='a') printf("s\n");
else if(a[0]=='s') printf("i\n");
else printf("no\n");
}

return 0;
}

では特に不思議な挙動はしてないねぇ. 少なくとも, 質問文に書かれているような動作はしてないよ (Windows10 + VS2015).

あとは最低限
・コンパイルできる完全なプログラム
・コンパイラや OS のバージョン
・コンパイルから実行までをどのような操作で行ったのか
くらいの情報はほしいなぁ....
    • good
    • 0

どういう状況なのか, もっと詳しく説明してもらえないでしょうか?



とりあえず思いついた疑問点です:
・「初回ループ後」というのは「1回目が終わったとき」のことでしょうか? もしそうだとして, では最初はどのように表示され, また「1回目が終わったとき」というのはどのように確認したんでしょうか? そうでないとしたら, 具体的にどのタイミングなのか明確にしてください.
・「その後次のループが正常に動き~」ということからすると「1回おきに『正常』に動作する」ように読めるんですけど, それでいいんでしょうか?
・gets に対する入力はどのようにしていますか? 何も入力しないにもかかわらず延々とそのような動作が続くということでしょうか?
・プログラム全体は出してもらえないんでしょうか?
    • good
    • 0

else printf("no");



else printf("no[%x]", a[0]);
として、なんの文字が入っているのか確認する。
というのもやってみてはどうでしょう?

ちなみに…今回の書き方ならif~else if~elseよりは、switch case~defaultでいいような気もしますけど。
    • good
    • 0

>while (1)


原因はコレ
    • good
    • 0

ぱっと見は問題があるようには見えませんね



type no と表示されるのが本当に2ループ目なのかを確認するために
ループ回数を表示するようにしてみてはいかがですか?
実際には何ループ目で表示されているのかを確認できればかなりヒントになると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!