2020/08/18

エド君と学ぶC講座1

今回の内容 printf、scanf 変数 代入 初期化

この記事はC言語むずいなと思ったたこ焼きがメモみたいな感覚でエド君と学んでくコンテンツです。参考になるかは知らぬ。
ちなみにVisual Studioを使用してますが後に語るscanfというコマンドでエラーが出てしまうのでSDLチェックをいいえにして対応する必要があります。



べつの環境使うなら多分気にしなくても良いやつ。



エド君「…でなんでオレが教えないといけないんだよ。」
いやあエド君こういうの得意そうだから。

エド君「チッ…じゃあまずはhalloworldからやるか。これを入れてみろ。」

#include<stdio.h>

int main(void) {
printf("Hello world!");
return 0;
}



おお、なんか出てきたな。しかしなぜhalloworldなんだ?エド君カワイイでもよくないか?
エド君「もともと昔にあったC言語の本で紹介されてから一番最初はこれをやるところが多くなったらしい。確かになんでも良いがオレはカワイクねぇ。」
つまりはこのprintfが文字を出すコマンドなわけか。
エド君「まあそういうことだ。出力したい文字は””の中に入れて括弧の終わりの次にはをつける。これを忘れるとエラーが起きるぞ。」
このint mainとかincludeは一体?
エド君「基本的なプログラムで使うやつだ。まあ土台だな。基本的にはこれを入れてint mainの中に実行したいプログラムを書いていくと覚えれば良い。時々説明で省略することもあるが実際に試すときには書くようにな。」
つまりはまじないみたいなもんだな。

エド君「他にも計算結果を出力することもできるぞ。printfの中身をこうしてみろ。」

printf("%d",9+11);

おお。確かに20になるな。でも%dってなんだ?
エド君「こいつは10進数で表示するときに使うやつだ。ちなみにこのdが10進数の語句に由来してるぞ。」
へえ…ということは他の進数にもできるのか。
エド君「8進数なら%o、16進数なら%xと聞くな。あまりつかわねぇとは思うけどな。」
2進数は?
エド君「2進数はねぇ。必要なら独自で実装しろ。他にもいろいろとあるがそれはまた使うときに話す。」
この%dとかと文字も組み合わせれるんだな。なるほどじゃあ2つの数字の和は○○ですみたいな文章もできるわけだ。
エド君「文章で思い出したが長い文とか行を分けたいって思う時が出てくるんだがそのときには\n(\のキーとn)を入れれば次の行にうつすことができる。」
なるほどな。

printf("エド君カワイイね…\n大天使エドエルだ。");


確かになるな!
エド君「文がおかしい気もするがまあ…そういうことだ。」






エド君「じゃあ次は変数だ。」
変数?
エド君「つまりは数字や文字を代入させて見やすくするってことだ。わかれ。今まではprintfの中に数字を入れていたが変数で入れて表示させるぞ。」

#include<stdio.h>

int main(void) {
int x,y;
x = 9;
y = x + 10;

printf("x=%d,y=%d",x,y);
return 0;
}


おお。xやyに数字を代入して出力された。
エド君「こんな風に代入の際に別の変数を使うこともできる。ちなみに基本的に数字の変数はintでいいが浮動小数点数を出すためのdoubleというものもある。変数を1つずつintで置くこともできるがその文行数は増えるからどっちが良いかは状況次第だな。」
そういえばもしxとyに数字代入しなかったらどうなるんだ?
エド君「試してみろ。」

…エラーになった。
エド君「オマエの環境だと出ないのか。変数は生成されるときに適当な数字が入れられる。だから変な数字になったりまあものによっては0が入るやつもあるかもしれねぇな。もし入れたい値がもうあるのなら初期化の際に入れるといい。こんな感じだな。」

・int x=9,y=x+10;

・int x=9;
   int y=x+10;

エド君「どっちでも良いが下の方が見やすい感じはある。」
初期化と代入とでタイミングが違うんだな。
エド君「先に入れておくか後から入れるかだな。」

なるほど…確かに便利だけど数字を変えたいときにわざわざ書き換えるのめんどくさいなあ。任意の数字を打ち込めるようなのないのか?
エド君「そのためにあるのがscanfという関数だ。これは変数に打ち込んだものを格納することができる関数になっている。例えばこんなものを入れてみろ。」

#include<stdio.h>

int main(void) {
int x;
printf("任意の数字を入れてください");
scanf("%d", &x);

printf("%dがにゅ


あ、改変してみて良いか?
エド君「ま、まあいいが…」

#include<stdio.h>

int main(void) {
int x;
printf("エド「任意の数字を言ってみろ。」");
scanf("%d", &x);

printf("エド「%dだな?」",x);
return 0;
}


おっとコンマが入り込んだから消しとかねば。
エド君「いやなんだよこれ…間違ってはねぇけどよ…」

やっぱ遊び心あったほうが楽しいだろう?
なるほどな。なんか楽しくなってきたな。
scanfのときは変数の前に&がいるのか。
エド君「これ意外と忘れてなんか違う答えになったとかエラーが起きたとかもあるから気をつけろよ。」


エド君「さて初回だし今回は本当に基礎のここらへんで終わっておくか。」
そういやこれ数字じゃなくて文字を入力したいときは何使えばいいんだ?
エド君「また後に話すから落ち着け。順序ってもんがあんだよ。」