C言語
前回、C言語でのプログラムの構文とデータ型を学んでみました。
今回はC言語での変数の定義の仕方とprintf関数を使った出力に関して勉強していきましょう。
それでは始めていきましょう。
変数の定義
まずは変数の定義の仕方を確認していきましょう。
お馴染みのPythonではこんなふうに定義しました。
a = 'x'
b = 1
c = 0.01
print(a)
print(b)
print(c)
実行結果
x
1
0.01
つまり変数は文字列だろうが、整数だろうが、小数だろうが何でも格納できるものでした。
もちろんそれぞれの値を格納した後は、変数はそれぞれ固有のデータ型を持っています。
a = 'x'
b = 1
c = 0.01
print(type(a))
print(type(b))
print(type(c))
実行結果
<class 'str'>
<class 'int'>
<class 'float'>
ではC言語ではどうでしょうか?
#include <stdio.h>
int main(void)
{
char a = 'x';
int b = 1;
float c = 0.01;
printf("%c\n", a);
printf("%d\n", b);
printf("%f\n", c);
}
実行結果
x
1
0.010000
C言語ではこのように「型 変数名 = 値」という形で変数を定義します。
大きな違いとしては、変数を決める際に型を明示する点にあると言えるでしょう。
このように意識的に型を決めるためか、C言語ではPythonでいう「type関数」のような型を確認するための関数がないようです(C++はある?)。
前回勉強したように型自体もPythonより多くあり、しかも変数を決める際に明示する必要があるのは、Python使いにとっては少し混乱する点かもしれませんね。
値を出力するprintf関数
それでは値を出力するための関数「printf関数」を勉強していきます。
これはPythonでいう「print関数」です。
一番基本なのは前回「Hello World!」を出力した時のプログラムです。
#include <stdio.h>
int main(void)
{
printf("Hello World!");
}
実行結果
Hello World!
単純に「printf(“出力したい文字列”);」で出力することができます。
文字列の出力は分かりましたが、数字でも同じように出力できるのでしょうか?
ということで整数で試してみましょう。
#include <stdio.h>
int main(void)
{
printf(1);
}
実行結果
printf2.c:5:12: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Wint-conversion]
printf(1);
^
(中略)
printf2.c:5:12: note: treat the string as an argument to avoid this
printf(1);
^
"%s",
2 warnings generated.
結果はこの通りだめでした。
ちなみにエラーの最後のほうを見るとどのように修正したらいいか出ていることもありますので、エラーメッセージはちゃんと確認することをお勧めします。
文字列以外、つまり整数や小数、そして変数を使う場合は「変換指定子」なるものを使うらしいです。
変換指定子を使ったprintf関数での出力
変換指定子とは「%と文字」を使って、その値が何であるか、文字なのか文字列なのか、整数なのか小数なのか、そしてどのように表示するのかを指定する方法です。
実はこの記事の最初の方のプログラムで何も説明せずに使っていたりします。
詳しい解説はまた別の機会にして、今回は早い段階で使いそうなものだけまずは紹介していきます。
変換指定子 | データ型 | 出力する値 |
%c | char | 文字 |
%s | char | 文字列 |
%d | int | 整数 |
%f | float | 小数 |
前回、データ型で解説したように整数や小数は符号付きか符号なしかや桁数によってデータ型が異なります。
そのためそれぞれの変換指定子がありますが、それはまたの機会ということで。
そしてこの変換指定子を使って、数字を表示させてみるとこうなります。
#include <stdio.h>
int main(void)
{
printf("%d", 1);
}
実行結果
1
つまり「printf(“変換指定子”, 値)」で表示できるようになるというわけです。
また複数の変換指定子を使い、さらにその間に文字や文字列を配置することも可能です。
複数指定する場合は「printf(“変換指定子1 変換指定子2 変換指定子3 “, 値1, 値2, 値3)」というように指定します。
#include <stdio.h>
int main(void)
{
printf("%c is %d + %f", 'a', 1, 0.567);
}
実行結果
a is 1 + 0.567000
そして変数を使用する場合もこの変換指定子を使います。
ということで最初のプログラムに戻るわけです。
#include <stdio.h>
int main(void)
{
char a = 'x';
int b = 1;
float c = 0.01;
printf("%c\n", a);
printf("%d\n", b);
printf("%f\n", c);
}
実行結果
x
1
0.010000
この例ではaは文字、bは整数、cは小数をそれぞれ格納し、printf関数で表示させています。
ちなみに「\n(バックスラッシュn)」はPythonのプログラムでも何度か出てきましたが、改行の意味です。
詳しく知りたい方は「エスケープシーケンス」で調べてみてください。
これで何となくですがprintf関数を使った出力が使えそうなところまできました。
ただこの後、文字と文字列に関して少しハマったので、次回はその話をしたいと思います。
ではでは今回はこんな感じで。
コメント