忙しい中失礼します。
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;
}
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
-----------------------------
スバリその通りなのです。適切な指摘有難うございます。ですが、私の至らない所が多々あり、結局このプログラムを完了させることは出来ませんでした。
とはいえ有難うございました。
No.4
- 回答日時:
NO.3の回答をしたものです。
内容がかぶってしまいました^^;
言いたい事はNO.1の方と一緒ですので、
混乱されないようにお願いします。
No.2
- 回答日時:
★アドバイス
・『scanf』から『getchar』関数で1文字を取得するように書き換えてみたらどうです。
この関数で最初に取得した文字が Enter の文字コードなら処理終了にします。
それ以外ならループさせます。なおループさせるときに英字などの1文字を取得後
Enter キーの文字コードが現れるまで getchar() 関数で連続する文字を取得して
入力バッファをクリアします。
・下にサンプルを載せておきます。
サンプル:
int ch;
while ( ((ch = getchar()) != EOF) && (ch != '\n') ){
/*
ここで ch のメッセージ処理
*/
// Enter キーを含んだ入力をクリア
while ( getchar() != '\n' ){
;
}
}
以上。
かなり回答に近い回答をありがとうございます。。
私の書いた文が曖昧なのだと思うのですが、getchar()文の使い方を未だ知らないのです。
getchar()の使い方を知った後、試してみようと思います。
ありがとうございました。
No.1
- 回答日時:
環境が不明なので正確なことは分かりませんが、
> while(scanf("%c", &ch)&&(ch!='\n'))
のところで、改行文字が入力されればループを終了するようにしているからではないでしょうか?
仕様的にも不明確な部分があるので、具体的なアドバイスはできません。
たとえば、「ab」と入力した後にEnterを押せばどうなるのが正しいのでしょうか?
もう補足をつけることはできませんが、”、「ab」と入力した後にEnterを押せば”ANo.3のようになります。
”改行文字が入力されればループを終了するようにしているからではないでしょうか?”そうなんです。
これをどうやって解決するかに悩んでます。・・・結局解けなかったけど。
とはいえ正確な指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Skype windows11 スリープからの復帰時にサイン画面を表示したいのですが 1 2022/06/10 10:50
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- Windows 10 エクスプローラで希望の場所が表示できない 2 2023/06/29 15:19
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
C言語 逆ピラミッドの作り方
-
コマンドプロンプトからのEOFの...
-
C++ Builder Xを使って実行結果...
-
scanf が無視されます
-
WindowsでEOF
-
fortranでread(5,input) とはど...
-
至急教えてください!プログラ...
-
scanfの後のfgetsについて
-
Linuxで入力待ちなしkeyread関...
-
プログラミングの問題です 「金...
-
Spreadのコンボボックス
-
キーボードを押すまで処理を中...
-
scanfが2回使えない・・・?;
-
数字以外が入力されたらエラー...
-
数値の連続入力終了条件について
-
c言語のプログラムで行列の積を...
-
至急お願いします。プログラミ...
-
数当てゲーム
-
getchar使用時の入力文字消去方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
cout関数を使っているのですが...
-
double型が正常に認識されてい...
-
小数か整数かを判定する方法
-
WindowsでEOF
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
おすすめ情報