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
と表示されます。(これの繰り返し)
どこが問題なのかわかる方いましたら回答よろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.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 のバージョン
・コンパイルから実行までをどのような操作で行ったのか
くらいの情報はほしいなぁ....
No.4
- 回答日時:
どういう状況なのか, もっと詳しく説明してもらえないでしょうか?
とりあえず思いついた疑問点です:
・「初回ループ後」というのは「1回目が終わったとき」のことでしょうか? もしそうだとして, では最初はどのように表示され, また「1回目が終わったとき」というのはどのように確認したんでしょうか? そうでないとしたら, 具体的にどのタイミングなのか明確にしてください.
・「その後次のループが正常に動き~」ということからすると「1回おきに『正常』に動作する」ように読めるんですけど, それでいいんでしょうか?
・gets に対する入力はどのようにしていますか? 何も入力しないにもかかわらず延々とそのような動作が続くということでしょうか?
・プログラム全体は出してもらえないんでしょうか?
No.3
- 回答日時:
else printf("no");
を
else printf("no[%x]", a[0]);
として、なんの文字が入っているのか確認する。
というのもやってみてはどうでしょう?
ちなみに…今回の書き方ならif~else if~elseよりは、switch case~defaultでいいような気もしますけど。
No.1
- 回答日時:
ぱっと見は問題があるようには見えませんね
type no と表示されるのが本当に2ループ目なのかを確認するために
ループ回数を表示するようにしてみてはいかがですか?
実際には何ループ目で表示されているのかを確認できればかなりヒントになると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
For文の終了値を関数にしても問...
-
入力した数値を倍々するプログラム
-
if文の中にfor文なのか、for文...
-
エクセルでC言語のfor文と同じ...
-
for文while文の無限ループの違...
-
PAD図の書き方
-
if文を使わずに奇数・偶数を判断
-
Excel VBAで年度をまたぐ期間の...
-
C言語forループが完結した場合...
-
文字列を後ろから1文字ずつ表示...
-
COBOLのEVALUATE文
-
無限ループ対策
-
C# 演算 Help me!
-
While文の終わりにセミコロンが...
-
Matlabを使った心理学実験
-
C言語 数字を削除する関数
-
C言語でstaticを外すと正常な出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
break文でループを一気に抜ける...
-
エクセルでC言語のfor文と同じ...
-
ループを途中で抜けたいのですが。
-
エクセルVBAで Do While (1)って?
-
C言語forループが完結した場合...
-
For文の終了値を関数にしても問...
-
excel VBA if文について
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
Excel VBAで年度をまたぐ期間の...
-
if文の中にfor文なのか、for文...
-
C言語、whileループを抜け出す...
-
for文while文の無限ループの違...
-
UWSCにてある一定の動作を無限...
-
__asm int 3でのブレイクポイン...
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
Cプログラムが終了しない
-
プログラムで関数は使わない方...
おすすめ情報
改行の¥n書き忘れてましたのでprintfには改行が入ってるものとして下さい。
typeと表示されるので、例えば i と入力します。すると、以下のように
type
i
o
type no
type
となり、入力待ちの状態になります。
再び
補足のiはlですね。