Page1の復習です。テキストを表示するときにはprintf()を使いました。
#include <stdio.h> int main(){ printf("This is an apple.\n"); return 0; }
「"」で囲まれた部分が画面上に表示されました。「\n」は改行でしたね。
変数については前回の計算のページで扱いました。前回は計算してそれで終わり、表示はしませんでしたが、今回はその表示について学びます。
あらかじめ決められた数字を表示する場合は上の方法でいいのですが、変数のように何が入るか分からない場合は、上の方法ではうまく表示できません。
#include <stdio.h> int main(){ int a; a = 5; printf("a\n"); return 0; }
↑の実行結果は
a
と表示されるだけで、5とは表示されません。
変数(整数)を表示させるには、表示させたい場所に%dを書き、「,」区切りで変数をいれます。次のようになります。
#include <stdio.h> int main(){ int a; a = 5; printf("Number = %d\n",a); return 0; }
%dの部分に5が入り、
Number = 5
と、表示されます。aの値を変えればその値が表示されます。複数表示させたい場合は
#include <stdio.h> int main(){ int a, b; a = 5; b = 6; printf("Number = %d, %d\n",a,b); return 0; }
と、複数記述します。結果は下の通りです。
Number = 5, 6
また、数字をダイレクトに表示することもできます。
#include <stdio.h> int main(){ printf("Number = %d\n",5); return 0; }
これだとあまり意味がありませんが・・・。
#define NUM 10 #include <stdio.h> int main(){ printf("Number = %d\n",NUM); return 0; }
定義した定数を表示したりするときに使えます(定数については後の章で扱います)。
#include <stdio.h> int main(){ int a, b; a = 5; b = 6; printf("%d + %d = %d\n", a, b, a + b); return 0; }
このように計算の結果をダイレクトに表示したいときに計算式を直接書くことも可能です。
%dの変わりに%f(float),%lf(double)を使用します。
#include <stdio.h> int main(){ float a; double b; a = 5.5; b = 6.5; printf("Number = %f, %lf\n",a,b); return 0; }
%とf(lf)の間に、「.数字」をいれます。小数点以下を表示させたくない場合は「%.0f」、小数点以下2桁までを表示したい場合は「%.2f」とします。
#include <stdio.h> int main(){ float a; float b; a = 5.5; b = 6.5; printf("Number = %.0f, %.2f\n",a,b); return 0; }
詳しくはPage11の項でやる予定ですので、ここではごく簡単に済ませます。
入力させるのにはscanfという命令を使用します。printfと逆のことを行うとおもってください。
下は整数を入力させ、それに1を加えた値を出力するプログラムです。
#include <stdio.h> int main(){ int a; printf("? "); scanf("%d",&a); a++; printf("Ans. = %d\n"a); return 0; }
「a++」は「a=a+1」と同じ意味でした。また変数の前の「&」を忘れないでください。これがないとエラーになります。(詳しくはポインタのところで)
注意:
scanf()には有名な脆弱性といくらかの不具合を持っています。使用の際は以下の点に注意してください。
文字数制限ができるfgets()とatoi()などを組み合わせた方が安全です。
#include <stdio.h> #include <stdlib.h> int main(){ int a; char buffer[10]; printf("? "); fgets(buffer, sizeof(buffer), stdin); /* 10文字までの入力を許可する。(文字列には最後の改行記号も含まれることに注意) */ a = atoi(buffer); /* 入力文字列を数字に変換する。 */ a++; printf("Ans. = %d\n"a); return 0; }
これだと、数字以外を入れられても、10文字以上を入力されてもバグりません。また、複数回の入力にEnterキーが反応するのを考慮しなくても良くなります。