• ベストアンサー

ダメだ・・・分からない。while文 無限ループ&’\n’エンター後無限ループ脱出

忙しい中失礼します。 C言語超初心者のものです。while文での表示について質問があります。 下記の’プログラム内容’はEnterキーが押されるまで、 ’k’入力後 → Enterキー → ASCII value of k is 107.  ’t’入力後 → Enterキー → ASCII value of t is 116. ・・・ のように継続させ、 何もアルファベットを記入せず、’Enterキー’のみを押した場合はループから抜け、DOS画面を終了するようにしたいのですが、それが出来ません・・・。 ’k’入力後Enterキーを押すと、’Enter a character:’の表示がなされた後、’Press any key to continue・・・’となり画面を閉じなければいけなくなります。 while文の中の()内を何とかすれば、思い通りのプログラムになる、とは思うのですが、それが考え付きません。 申し訳ありませんが、よろしければそのヒントを下さい。多分すごく簡単なことだとは思うのですが、それが出来ません。 ※私個人の考えとしては、while文の中の(scanf("%c", &ch)&&(ch!='\n'))において、’&&(ch!='\n')’をプログラム文からなくせば、Enterキーを押さない限り(’k’入力後のEnterキー除く)、何度もパソコン側から尋ねられると思ったのですが・・・。・・・うまくいかず。 プログラミング内容: #include <stdio.h> #include <stdlib.h> int main() { char ch; printf("Enter a character:\n"); while(scanf("%c", &ch)&&(ch!='\n')) { printf("ASCII value of %c is %d.\n\n", ch, ch); printf("Enter a character:\n"); } system("PAUSE"); return 0; }

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

  • ベストアンサー
  • akiyousan
  • ベストアンサー率29% (13/44)
回答No.3

aaaa入力後→Enterキー というのを実施すると、 下記のような実施結果になると思っていませんか? ----------------------------- ASCII value of a is 97. Enter a character: Press any key to continue ----------------------------- そんな風には思ってませんだったら、 スミマセン・・・なんですが、 もしそう思ってるのであれば、試しに実施してみて下さい。 (a→Enter を4回という意味では無いですよ。) 下記のように表示されるはずです。 キー入力後にどういう処理が実施されているのか、 実施結果を踏まえて考えてみてください。 ----------------------------- ASCII value of a is 97. ASCII value of a is 97. ASCII value of a is 97. ASCII value of a is 97. Enter a character: Press any key to continue -----------------------------

jpncndgoo2
質問者

お礼

スバリその通りなのです。適切な指摘有難うございます。ですが、私の至らない所が多々あり、結局このプログラムを完了させることは出来ませんでした。 とはいえ有難うございました。

その他の回答 (3)

  • akiyousan
  • ベストアンサー率29% (13/44)
回答No.4

NO.3の回答をしたものです。 内容がかぶってしまいました^^; 言いたい事はNO.1の方と一緒ですので、 混乱されないようにお願いします。

jpncndgoo2
質問者

お礼

親切に気を使っていただき有難うございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・『scanf』から『getchar』関数で1文字を取得するように書き換えてみたらどうです。  この関数で最初に取得した文字が Enter の文字コードなら処理終了にします。  それ以外ならループさせます。なおループさせるときに英字などの1文字を取得後  Enter キーの文字コードが現れるまで getchar() 関数で連続する文字を取得して  入力バッファをクリアします。 ・下にサンプルを載せておきます。 サンプル: int ch; while ( ((ch = getchar()) != EOF) && (ch != '\n') ){  /*  ここで ch のメッセージ処理  */    // Enter キーを含んだ入力をクリア  while ( getchar() != '\n' ){   ;  } } 以上。

jpncndgoo2
質問者

お礼

かなり回答に近い回答をありがとうございます。。 私の書いた文が曖昧なのだと思うのですが、getchar()文の使い方を未だ知らないのです。 getchar()の使い方を知った後、試してみようと思います。 ありがとうございました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

環境が不明なので正確なことは分かりませんが、 > while(scanf("%c", &ch)&&(ch!='\n')) のところで、改行文字が入力されればループを終了するようにしているからではないでしょうか? 仕様的にも不明確な部分があるので、具体的なアドバイスはできません。 たとえば、「ab」と入力した後にEnterを押せばどうなるのが正しいのでしょうか?

jpncndgoo2
質問者

お礼

もう補足をつけることはできませんが、”、「ab」と入力した後にEnterを押せば”ANo.3のようになります。 ”改行文字が入力されればループを終了するようにしているからではないでしょうか?”そうなんです。 これをどうやって解決するかに悩んでます。・・・結局解けなかったけど。 とはいえ正確な指摘ありがとうございました。

関連するQ&A