入力した文字を区別して、文字数を表示するというプログラムを作りました。
Enterキーを押すと、do-whileを抜けだして、文字の個数を表示します。
このプログラムを作っている最中に気づいたのですが
getchar関数を使っているときはEnterキーを押すと(\n)が入力されます
getch関数を使っているときはEnterキーを押すと(\r)が入力されます
EnterキーはCR(carriage return)=復帰を意味するキーだとは聞いたのですが
それなら何故getch,getcharも(\r)で統一しないのしょうか?
何故このような違いがでるのでしょうか?
教えてくださいお願いします。
OSはWindows7です
また参考として下にプログラムを記しておきます。
#include <stdio.h>
#include <conio.h>
int main(void){
int kazu=0,eji=0,kugiri=0;
char ch;
do{
ch=getche();
switch(ch){
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
kazu++;
break;
case ',':
case '.':
kugiri++;
break;
default:
eji++;
break;
}
}while(ch !='\r');
printf("\n数字は%d個\n英字は%d個\n区切り文字は%d個\n",kazu,eji,kugiri);
return 0;
}
getchとgetcharにおける改行
Re: getchとgetcharにおける改行
getch() と getchar() では目的が違います。
getch() がコンソール入出力関数であるのに対し
getchar() は標準入出力関数です。
getch() がリダイレクトすることは出来ないのに
対し、getchar() はリダイレクトされていれば、
ファイルからの入力も出来ます。
getchar() は文字の入力のための関数で、多くの
場合行単位の入力になります。Enterキーを押した
と言うことは、行の終わりを意味するので、改行
(\n) に変換されます。
一方 getch() はそういった変換は一切行われません。
文字の入力と言うよりも、キーの入力といった方が
いいかもしれません。
以下のプログラムでは、getchar() では取得できない
[F?]キーや[Delete]キーなども取得できます。
※終了する時は[Ctrl]+[Break]です
getch() がコンソール入出力関数であるのに対し
getchar() は標準入出力関数です。
getch() がリダイレクトすることは出来ないのに
対し、getchar() はリダイレクトされていれば、
ファイルからの入力も出来ます。
getchar() は文字の入力のための関数で、多くの
場合行単位の入力になります。Enterキーを押した
と言うことは、行の終わりを意味するので、改行
(\n) に変換されます。
一方 getch() はそういった変換は一切行われません。
文字の入力と言うよりも、キーの入力といった方が
いいかもしれません。
以下のプログラムでは、getchar() では取得できない
[F?]キーや[Delete]キーなども取得できます。
※終了する時は[Ctrl]+[Break]です
Re: getchとgetcharにおける改行
返信と参考プログラムをありがとうございます。
分かりました。
ただひとつ疑問に思ったのですが、
コンソール入出力関数にはどのようなメリットがあるのでしょうか?
ラインバッファ処理をしないからリアルタイムな受け答えが可能
みたいなことは聞いたのですが…
この他にメリットはあるでしょうか?
分かりました。
ただひとつ疑問に思ったのですが、
コンソール入出力関数にはどのようなメリットがあるのでしょうか?
ラインバッファ処理をしないからリアルタイムな受け答えが可能
みたいなことは聞いたのですが…
この他にメリットはあるでしょうか?
Re: getchとgetcharにおける改行
メリットと言えるかどうかわかりませんが、getch() は入力をエコーバックしません。サモサ さんが書きました:この他にメリットはあるでしょうか?
例えば、パスワード入力などの場合 getchar() ではエコーバックしてしまうので、
何らかの処置が必要になります。
コンソール入出力関数のメリットは特別には考えとことがなかったです。
前にも書きましたが、目的が違うので使い分けが肝要ではないでしょうか。