- ベストアンサー
ダメだ・・・分からない。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; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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 -----------------------------
その他の回答 (3)
- akiyousan
- ベストアンサー率29% (13/44)
NO.3の回答をしたものです。 内容がかぶってしまいました^^; 言いたい事はNO.1の方と一緒ですので、 混乱されないようにお願いします。
お礼
親切に気を使っていただき有難うございました。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・『scanf』から『getchar』関数で1文字を取得するように書き換えてみたらどうです。 この関数で最初に取得した文字が Enter の文字コードなら処理終了にします。 それ以外ならループさせます。なおループさせるときに英字などの1文字を取得後 Enter キーの文字コードが現れるまで getchar() 関数で連続する文字を取得して 入力バッファをクリアします。 ・下にサンプルを載せておきます。 サンプル: int ch; while ( ((ch = getchar()) != EOF) && (ch != '\n') ){ /* ここで ch のメッセージ処理 */ // Enter キーを含んだ入力をクリア while ( getchar() != '\n' ){ ; } } 以上。
お礼
かなり回答に近い回答をありがとうございます。。 私の書いた文が曖昧なのだと思うのですが、getchar()文の使い方を未だ知らないのです。 getchar()の使い方を知った後、試してみようと思います。 ありがとうございました。
- jacta
- ベストアンサー率26% (845/3158)
環境が不明なので正確なことは分かりませんが、 > while(scanf("%c", &ch)&&(ch!='\n')) のところで、改行文字が入力されればループを終了するようにしているからではないでしょうか? 仕様的にも不明確な部分があるので、具体的なアドバイスはできません。 たとえば、「ab」と入力した後にEnterを押せばどうなるのが正しいのでしょうか?
お礼
もう補足をつけることはできませんが、”、「ab」と入力した後にEnterを押せば”ANo.3のようになります。 ”改行文字が入力されればループを終了するようにしているからではないでしょうか?”そうなんです。 これをどうやって解決するかに悩んでます。・・・結局解けなかったけど。 とはいえ正確な指摘ありがとうございました。
お礼
スバリその通りなのです。適切な指摘有難うございます。ですが、私の至らない所が多々あり、結局このプログラムを完了させることは出来ませんでした。 とはいえ有難うございました。