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


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


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


このげっとちゃ~~


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


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


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


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


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


モジモジ 


文字といえば


文字を格納する


変数の型charや


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


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


親しみを感じちゃうな。


char型の変数は


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


さらに


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


文字をシングルクォーテーション'で囲った


'b'

'm'などの


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


%c出力変換指定子を用いて


printf("%c\n",32)


を実行すれば


32(アスキーコード)を


🍊空白スペース🍊


に変換して


printf出力表示したり


あるいは


それっ


#include <stdio.h>


int main(void)


{

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

return 0;

}


ソーラー 「コンパイルっ(^^)/」


プログラムの実行結果(EAZY IDECの場合)

ビルド結果(Visual Studioの場合)



👆

このように


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


printf出力表示したりできるね


char型の変数に


char a='1';

char b='8';

char c='a';

char d='b';


のように格納された


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


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



%c出力変換指定子を用いて


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文字になるから


10をキーボードから入力すると


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


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

半角英数字1文字である


a


が入力されたとき


getchar()関数の戻り値は


そのまま


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


a(正しくは文字データ'a')


となるんです。


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

半角英数字1文字である


b


が入力されたとき


getchar()関数の戻り値は


そのまま


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


b(正しくは文字データ'b')


となります。


だから


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

半角英数字1文字である


b


が入力されたとき


getchar()関数の戻り値はb(正しくは文字データ'b')となるので



char a=getchar();


が実行されたなら


getchar()の戻り値であるb(正しくは文字データ'b')が


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


その状態で


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


が実行されると


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


b


表示されます。


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


が実行されていることになります




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


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


この


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


ができるんです


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


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


scanf

「くきゅるるる」


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


ソーラー

「このgetchar関数は


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


受け付ける関数なんだ。


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


scanf

「く~ん、く~ん。」


ソーラー

「それではっ!


#include <stdio.h>


int main(void){

char a;

a=getchar();//👈文字データを入力しようとしています

printf("%c\n",a);//👈文字データをprintf出力表示しようとしています

return 0;

}


このプログラムの流れは


まず

aのchar型の変数宣言

char a;

を行い


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

入力される半角英数字1文字(文字データ)を格納するchar型の変数aを


作製します


次に


a=getchar();


の命令文が実行されると


プログラム実行後

表示される


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



_



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


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


変数aにその1文字(その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(正確にはシングルクォーテーション'で囲った'7')を


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


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


マックス「??


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


ソーラー「数値7(正確にはシングルクォーテーション'で囲った'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が表示されます。


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


ソーラー「それなのに


getchar()関数をつかって


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


7を入力した場合


char型の変数aに取り込んだ7(正確にはシングルクォーテーション'で囲った'7')が


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

のように

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


プログラムの実行結果は


7と表示されます


7はアスキーコードと認識されていないんです」



マックス「そりゃあ 


char型の変数aに取り込んでいるのは


数値データ7でなく


シングルクォーテーション'で囲った文字データ'7'だからなあ


自分でいってるじゃないか?」


ソーラー「なんで そこに気づきました!






getchar()関数は


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



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



というわけです。


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


char型の変数aに


getchar関数をつかって


a=getchar();


のように


半角英数字1文字


a

7


をとりこむさい


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


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


getchar()には


文字データ

'a'

'7'  


が返されています」


マックス「


OK~


優れた考察じゃないか」







🌞  🌞  🌞  🌞  🌞  🌞

実は

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


a

7


文字列データ


"a"

"7"


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


"a"は文字データ'a','\0'

"7"は文字データ'7','\0'


で構成されています



getchar関数は


文字列データ


"a"

"7"


から

取り出した


文字データ


'a'

'7'

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

🌞  🌞  🌞  🌞  🌞  🌞



つまり数値7が


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


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



普通


数値7も


'7'のように


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


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


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


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


そのプログラムはこちらです


👇


#include <stdio.h>


int main(void){

char a='7';

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

return 0;

}


プログラムの実行結果

(EAZY IDECの場合)

(Visual Studioの場合)

7




それが


getchar関数をつかって


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


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


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

a

7


のように


文字をうちこみます




入力するデータ


a

7


  'a' '7'  のように


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


おこなわなくても


char型の変数aに

文字データ

'a'

'7'


が格納が出来ているんです😊」


マックス

「おお  なんと


だから getchar


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


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


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


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


ははははは、


文字も数値も シングルクォーテーションで囲った文字データとして


char型の変数aに入力されておる、のう?ソーラーや?」


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


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


快活に応えるマックス。


ソーラー 


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


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


ソーラー 「最近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文字入力ではなく複数個


半角英数字を入力してみよう。


ではそのプログラムはこちらです

👇


#include <stdio.h>


int main(void){

char a;

a=getchar();

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

return 0;

}


プログラムの実行結果は


11111(を入力すると)

1(と表示されます)


rrrrrrr(を入力すると)

r(と表示されます)


abcdefg(を入力すると)

a(と表示されます)


となります。


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


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


されているね。


getchar()関数は


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


       文字データとして  


戻り値として受け取ることになるので 


char型の変数に1文字だけ


文字データが格納されることになります


では・・・


複数個の文字


今の例でなら


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言語漁を続けるマックス。


ソーラー 「は~~~~~😊


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


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


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








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


アレサ

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

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る