アプリ版:「スタンプのみでお礼する」機能のリリースについて

忙しい中失礼します。
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;
}

A 回答 (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
-----------------------------
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/11 01:40

NO.3の回答をしたものです。


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

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

お礼日時:2007/10/11 01:46

★アドバイス


・『scanf』から『getchar』関数で1文字を取得するように書き換えてみたらどうです。
 この関数で最初に取得した文字が Enter の文字コードなら処理終了にします。
 それ以外ならループさせます。なおループさせるときに英字などの1文字を取得後
 Enter キーの文字コードが現れるまで getchar() 関数で連続する文字を取得して
 入力バッファをクリアします。
・下にサンプルを載せておきます。

サンプル:
int ch;

while ( ((ch = getchar()) != EOF) && (ch != '\n') ){
 /*
 ここで ch のメッセージ処理
 */
 
 // Enter キーを含んだ入力をクリア
 while ( getchar() != '\n' ){
  ;
 }
}
以上。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/11 01:45

環境が不明なので正確なことは分かりませんが、



> while(scanf("%c", &ch)&&(ch!='\n'))

のところで、改行文字が入力されればループを終了するようにしているからではないでしょうか?

仕様的にも不明確な部分があるので、具体的なアドバイスはできません。
たとえば、「ab」と入力した後にEnterを押せばどうなるのが正しいのでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/11 01:48

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

このQ&Aを見た人はこんなQ&Aも見ています