今回の内容 型の種類 文字列入力(序盤のみ)
エド君「なにを語るか悩んでたがそうだな…今回は型とかを中心にしていくか。」
型?
エド君「intとかdoubleとかのやつだ。こういうのは算術型と言われている。その中にもいろいろと種類があるんだが…intは整数型、doubleは浮動小数点型と言われているな。」
なるほどな。そういや文字入力用の型もあるのか?
エド君「ああ。charという文字型がある。」
エド君「さて本題だがこの整数型や文字型には符号の有無があってだな…」
int
signed int
unsigned int
エド君「とまあこんな感じにわけられる。signedは符号あり、unsignedは符号なしの整数型だな。マイナスの数字とか使いたいときには符号あり、負の数が出ないなら符号なしにしておくといい。まあ符号ありならintだけでいいんだが。あとintの中でも長さがある。」
short int
int
long int
エド君「余談だがshortやlongだけで書くとintの省略されたものという解釈になる。」
範囲の違いとかはわかったが実際の範囲としてはどうなんだ?
エド君「そうだな…ここに範囲の一覧を載せておく。」
char…0~255(-128~127の環境もある)
signed char…-128~127
unsigned char…0~255
short…-32768~32767
int…-32768~32767
long…-2147483648~2147483647
unsigned short…0~65535
unsigned…0~65535
unsigned long…0~4294967295
うわ数字でかすぎて意味分からん。なんだこれ。
エド君「まあ2の累乗の応用だ。」
256は流石に分かるが…
エド君「65536で2の16乗、4294967296で32乗だな。」
…ビット数か!!
エド君「そういうことだ。」
なるほどそれならわかりやすい。でもcharが2通りあるのはなんでだ?
エド君「環境の違いだな。ちなみにオマエの環境は-128~127だったぞ。」
統一すりゃ良いのにな。
エド君「char型の大きさは1だがそれ以外は環境によって異なってくる。試しにオマエの環境で調べてみるか。」
#include<stdio.h>
int main(void) {
printf("char:%d\n",sizeof(char));
printf("short:%d\n",sizeof(short));
printf("int:%d\n", sizeof(int));
printf("long:%d\n", sizeof(long));
return 0;
}
エド君「sizeof演算子を使えばこんな感じで型の大きさを調べることができる。環境によってはchar以外3つが全部同じ大きさってこともあるみてぇだな。」
エド君「ああそうだ。オマエが気になってた文字列の入力についても触りだけ話すか。」
待ってました。
エド君「C言語の文字列なんだが列の最後にナル(ヌル)文字が入ってくるという点がある。例えばADDと入れた場合は最後に文字が入って来て4文字という扱いになるわけだ。」
つまり入れた文字+1文字ってことか。
エド君「そういうことだ。文字列を入れたい変数はさっき言ったcharを使うといい。」
#include<stdio.h>
int main(void) {
char a[] = "ADD";
printf("%s", a);
return 0;
}
エド君「こうすれば文字を出力できるわけだ。文字列のときは%sになるからそこは間違えねぇようにな。」
キーボードから打ち込むときは?
エド君「これもscanfでいけるんだが注意点があってintとかのときは
scanf("%d",&a);
だったのが文字列だと
scanf("%s",a);
と&をつけない決まりになっている。」
なるほどじゃあなんか作ってみるか。
#include<stdio.h>
int main(void) {
char a[50];
printf("エド君に何か言わせてみよう!:");
scanf("%s", a);
printf("エド君「%s」", a);
return 0;
}
つまりはこういうことだな!!
エド君「オマエ…これがやりたかっただけだろ…」
これでエド君にいろいろ言わせれるぞ!!
エド君「悪用するな。」
エド君「さて今回はここら辺で終わりだ。次は…何にするか…」
文字列やってこうぜ。
エド君「その前になにかしらやりてぇんだよな。」