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の場合)
d
👆
このように
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の場合)
x
のようなコンパイル結果が表示されます。
この数値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言語漁を続けるマックス。
ソーラー 「は~~~~~😊
文章などのたくさんの文字を
コンピュータのメモリに格納する方法については
もう少し時間がかかりそうだね・・・」
こちらは緑に囲まれたお部屋。。。
アレサ
「 どうやら そろそろ配列システムの片鱗がみえてきたみたいです。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます