getchar関数はコマンドプロンプト画面から入力されたデータが数値、文字にかかわらず🍎自動的に文字として🍎 変数の型charに格納します 

マックス 「getchar()関数・・・これを紹介したくてしたくて


しょうがなかったんだ・・・


このげっとちゃ~~


愛らしい響き 、そうはおもわないka?」


船はゆらゆらと陽気にゆれている。


太陽の光が大量に燦燦と降り注ぐ。


ソーラー 「私もそうおもうな(^^)。


半角英数字1文字の入力を受け付けるgetchar関数\(^o^)/


モジモジ 


文字といえば


文字を格納する


変数の型charや


文字をprintf出力表示する%c出力変換指定子をおもいつくね。


変数の型charも%c出力変換指定子も個性的なところがあるね、


親しみを感じちゃうな。


char型の変数は


格納できる数値の範囲は-128~127であり


さらに


他のintやfloat型などの変数とは違い


半角英数字1文字を格納することができるね。


%c出力変換指定子も


32(アスキーコード)は空白スペースに

33から126の(アスキーコード)を文字に変換して


printf出力表示したり


char型の変数に


char a='1';

char b='8';

char c='a';

char d='b';


のように格納された


半角英数字1文字の文字データ


'1'、'8'、’a' 、'b'


printf("%c\n",a)

printf("%c\n",b)

printf("%c\n",c)

printf("%c\n",d)

を行うことにより


コマンドプロンプト画面に


1

8

a

b

printf出力表示したりできたよね。


#pragma warning(disable: 4996)

#include <stdio.h>

int main(void) {


char a = '1';

char b = '8';

char c = 'a';

char d = 'b';


printf("%c\n", a);

printf("%c\n", b);

printf("%c\n", c);

printf("%c\n", d);

return 0;

}


コンパイル結果

(EAZY IDECの場合)

(Visual Studioの場合)


1

8

a

b


これがまた楽し~いんだ。


そしてここにきて


getchar()関数の登場です。


char a=getchar();


という表記をみかけたことがあるかな?


getchar()関数はコマンドプロンプト画面から半角英数字1文字の入力を


うけつけます


ユーザーが打ち込む半角英数字1文字は


1

5


のような


数値でも


a

g

のような

文字でもいいんだよ~。


10


半角英数字2文字になるから


getchar()関数は左側の1だけの入力をうけつけるんだよ


コマンドプロンプト画面から

半角英数字1文字である

a


が入力されたとき


getchar()関数の戻り値は


そのまま


コマンドプロンプト画面から入力された半角英数字1文字である

a


となるんです。


コマンドプロンプト画面から

半角英数字1文字である

b


が入力されたとき


getchar()関数の戻り値は


そのまま


コマンドプロンプト画面から入力された半角英数字1文字である

b


となります。


だから


コマンドプロンプト画面から

半角英数字1文字である

b


が入力されたとき


getchar()関数の戻り値はbとなるので



char a=getchar();


が実行されたなら


getchar()の戻り値であるbが


char型の変数aに格納されるというわけです。


その状態で


printf("%c\n", a);


が実行されると


コマンドプロンプト画面に


b


表示されます。



今まで 数値入力はscanf関数を用いておこなわれていたね。


(実はscanf関数でも文字や文字列入力を受け付けることができます)


この


getchar()関数でも半角英数字1文字だけですが入力を受け付けること


ができるんです


でもちょっとちがうところもあります


待望の関数さんなんです」


scanf

「くきゅるるる」


マックス 「おお、よし、よ~し」


ソーラー

「このgetchar関数は


コマンドプロンプト画面から半角英数字の入力を1文字だけ


受け付ける関数なんだ。


実際の使用例をみながら解説してみよう。


scanf

「く~ん、く~ん。」


ソーラー

「それではっ!


#include <stdio.h>


int main(void){

char a;

a=getchar();

printf("%c\n",a);

return 0;

}


このプログラムの流れは


まず

変数宣言

char a;

を行い


コマンドプロンプト画面から

入力される半角英数字1文字を格納する変数aを


作製します


次に


a=getchar();


の命令文が実行されると


コンパイル後の


コマンドプロンプト画面に



_



アンダーバーが表示され文字の入力が促されます。


ここで 半角英数字を 「1文字」 打ち込むと


変数aにその1文字が格納され


次の命令文 printf("%c\n",a); によって


変数aに格納された半角英数字1文字が


%c出力変換指定子をつかって


コマンドプロンプト画面にprintf出力表示されるんだ。


これがgetchar()関数のプログラムの一連の流れかな。


英字rを打ち込んだ場合は


コマンドプロンプト画面には


r  (と入力)

r  (と表示されます)

続行するには何かキーを押してください_


数値を1を打ち込んだ場合は


1  (と入力)

1  (と表示されます)

続行するには何かキーを押してください_


数値を7を打ち込んだ場合は


7 (と入力)

7 (と表示されます)

続行するには何かキーを押してください_


のようにコマンドプロンプト画面に表示されます。


このようにgetchar()関数は 半角英字1文字だけでなく半角数字1文字も


変数aに格納できている・・・・・・・・・・・・・・・・


・・・・・・・・・・・・・・・・・・・・・・・・・・・



・・・・・・・・・・・・・・・・・・・・・・・・・・・



ここで 気づいたことが・・・・・」


マックス 「気づいたこと?


ソーラー「


7  (と入力)

7  (と表示されます)


とコマンドプロンプト画面に表示されています。」


マックス

「ふむぅ?


それは ふつうのことじゃないか?


新型のボケか(´▽`*)」


ソーラー「この打ち込んだ7は数値ですよ」


マックス 「なははは そうじゃ そうじゃ」


ソーラー 「そして  そのchar型の変数aに取り込んだ7を


printf("%c\n",a);


をつかって出力してますよ」


マックス「??


printf関数を使って出力表示するのはあたりまえではないか・・・?」


ソーラー「数値7を

     

        %c


printf出力表示しています。」


マックス「わっかりましぇ~~ん(´▽`)」


ソーラー「もし 数値7を 変数の型charに取り込んで数値7をprintf出力表示するのなら


%d出力変換指定子を つかわないと いけないんです。


普通は%c出力変換指定子をつかって数値7をprintf出力表示しようとすると


#include <stdio.h>


int main(void){

char a=7;

printf("%c\n",a);

return 0;

}


コンパイル結果

(EAZY IDECの場合)

(Visual Studioの場合)


(空白)


というコンパイル結果や


(アスキーコード7には(空白)が対応しています)


%c出力変換指定子をつかって数値88をprintf出力表示しようとすると


#include <stdio.h>


int main(void){

char a=88;

printf("%c\n",a);

return 0;

}


コンパイル結果

(EAZY IDECの場合)

(Visual Studioの場合)


のようなコンパイル結果が表示されます。


この数値88の場合は


数値88が アスキーコードと認識されて 文字xが表示されます。


マックス「おおぅ なにぃぃぃ」


ソーラー「それなのに


char型の変数aに取り込んだ7が


printf("%c\n",a);

のように

%c出力変換指定子を使っているのに



コンパイル結果は

アスキーコードと認識されず7と表示されます


getchar()関数は


この 数値7の例のをみてもわかるように



🍎コマンドプロンプト画面から入力された半角英数字は すべて文字として 変数の型charにとりこんでいる🍎



というわけです。


つまり コマンドプロンプト画面から


変数の型charに


getchar関数をつかって


半角英数字1文字をとりこむさい


a や7に  'a' '7'  のような操作が


おこなわれているってことになるんです😊


🌞  🌞  🌞  🌞  🌞  🌞

実は

コマンドプロンプト画面から打ち込まれた


a

7


文字列データ


"a"

"7"


とコンピュータに認識されています。


getchar関数は


文字列データ


"a"

"7"


から

取り出した


文字データ


'a'

'7'

を戻り値として受け取っています。

🌞  🌞  🌞  🌞  🌞  🌞



つまり数値7が


数値7としてchar型の変数aに格納されているわけでなく


文字7としてchar型の変数aに格納されているのです。



数値7も'7'と


#include <stdio.h>


int main(void){

char a='7';

printf("%c\n",a);

return 0;

}

コンパイル結果

(EAZY IDECの場合)

(Visual Studioの場合)

7


''シングルクォーテーションでくくって文字7として


変数の型charにおくりこんでやれば


文字を出力する%c出力変換指定子を使って


7とprintf出力表示できますね。


それが

getchar関数をつかって


半角英数字1文字をとりこむさいには


a や7に  'a' '7'  のように


シングルクォーテーションで囲むということを


おこなわなくても


char型にa や7が格納が出来ているんです😊


マックス

「おお  なんと


だから getchar


まんま getchar (文字をゲットする)


というネーミングとなっているわけか


わかりやすいネーミングだな~ 


これは大漁情報getじゃぞい


ははははは、


文字も数値も 文字としてchar型に入力されておる、のう?ソーラーや?」


ソーラー「だれの真似してるんですか?」


マックス「いや~ははは、ちょっと、あちらでいろいろあってな。」


快活に応えるマックス。


ソーラー 


「まあ、いいか~ というわけで今日も大漁なんですよ~~~」


マックス 「男は黙って漁!!!」


ソーラー 「最近C言語で漁しているやつがいるんですよ~」


マックス 「な~に~~、やっちまったな~~~~~


それは俺じゃないか!


男は黙って漁!!!」


焼きintをおいしそうにほおばるマックス。


マックス 「フゥゥ~~~~~~、おいCィィィィィ~~~」


ソーラー 「お次は まあ、とりあえず、char aを記述しないプログラムを


観察してみるよ。


getchar()関数は文字入力をうけつけるかな?


むしゃ、むしゃ この焼きmainおいしいね~~」


#include <stdio.h>


int main(void){

a=getchar();

printf("%c\n",a);

return 0;

}



ソーラー

コンパイル結果はっと


やっぱりか・・・


(EAZY IDECの場合)を


ファイル「C:/Users/solarplexus/AppData/Local/EasyIDEC/project/wwwwwww/main.c」の

「4行目」で記述エラーを発見しました。

「a」が定義されていません。

名前が間違っていないかどうか確認してください。


(Visual Studioの場合)

ビルド結果

エラー (アクティブ) E0020 識別子 "a" が定義されていません

エラー C2065 'a': 定義されていない識別子です。

エラー C2065 'a': 定義されていない識別子です。



いつもどおり


変数宣言aをしていないときのエラー文


変数「a」が定義されていません。 がでてきたね。」


太陽によって海上のマックスとソーラーが照らされ


水面はその光を反射してきらめいている。


雄大な自然の中で時は流れ続ける。


ソーラー 「次、今度は


半角英数字1文字入力できるところを複数個


文字を入力してみよう。


コンパイル結果は


11111(を入力すると)

1(と表示されます)


rrrrrrr(を入力すると)

r(と表示されます)


abcdefg(を入力すると)

a(と表示されます)


となります。


先頭の1文字だけが変数の型charをつかって


コンピュータのメモリに格納されてprintf出力表示


されているね。


getchar()関数は


複数の数値、文字入力をうけても先頭の1文字だけ


       文字として   


変数の型charに取り込みます。


では・・・


複数個の文字


今の例では


rrrrrrrやabcdefg


をコマンドプロンプト画面から入力して


コンピュータのメモリに格納するには・・・?


どのようにしたらいいかな😊?


getchar関数ではできないよね?


ふつうに 考えて 文章などのたくさんの文字を


コンピュータのメモリに格納する方法があるはずだよね。」


🐥

ちなみに ひらがな あを


getchar関数をつかって 入力すると


#include <stdio.h>


int main(void){

char a;

a=getchar();

printf("%c\n",a);

return 0;

}


コンパイル結果

あ  (と入力すると)

・  (と表示されます)


変数の型charは半角英数字1文字(1バイトのデータ)しか格納できないので


2バイトのデータ量を持つ ひらがな あ のようなものは 格納できません


🐤


マックス 「ははは、漁じゃ~~~」


次々とC言語漁を続けるマックス。


ソーラー 「は~~~~~


文章などのたくさんの文字を


コンピュータのメモリに格納するに方法については


もう少し時間がかかりそうだね・・・」








こちらは緑に囲まれたお部屋。。。


アレサ

「 どうやら そろそろ配列システムの片鱗がみえてきたみたいです。」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます