CRTに文字や数字を出力するには
書式付標準出力関数「printf」を使用する。 文字列の場合、printfの括弧の間に表示したい文字列をダブルクォーテーション「”」で囲んで記述する。例)、CRTに「Hello! Everybody!!」と出力するプログラム
/* 文字列を出力するプログラム */ #include <stdio.h> main() {printf("Hello! Everybody!!\n");}
変数の内容を出力するには
変換文字を使ってprintfを記述する。例)、CRTに変数age(int型)の内容を出力するプログラム
/* 変数の内容を出力するプログラム */ #include <stdio.h> main() { int age = 29; printf("%d\n",age); }例)、応用
/* 変数の内容を出力するプログラム */ #include <stdio.h> main() { int age = 29; printf("I am%dyears old.\n",age); }この場合、
%dの所にageの内容「29」が入る。
変換文字の種類 変換文字 変換の内容 引数の型 プログラム例 %d 引数を符号付き10進数に変換する 整数型 1 %o 引数を符号なし8進数に変換する 整数型 2 %x , %X 引数を符号なし16進数に変換する 整数型 3 %u 引数を符号なし10進数に変換する 整数型 − %s 引数によって指し示される文字列を出力する。出力されるのはNULL文字の前の文字まで、または指定された最大の文字数分。 文字列ポインタ 5 %f 引数をfloatまたはdoubleとして受け取り、[-]○○○.○○○○○○の形の10進数に変換する 不動小数点型 6 %e , %E 引数をfloatまたはdoubleとして受け取り、[-]○○○.○○○○○○E[+-]○○の形の10進数に変換する 不動小数点型 7 %g , %G %eまたは%fによる変換の文字数の少ないほうの変換をする 不動小数点型 − 例)、変換例
/* 変換例 */ #include <stdio.h> main() { int i = 12345; char moji = 'C'; char str[80] = "C Language"; double x = 123.456; printf("i = %d\n", i); ・・・・・・1 printf("i = %o\n", i); ・・・・・・2 printf("i = %x\n\n", i); ・・・・・・3 printf("%c Programming\n", moji);・・・4 printf("%s\n\n", str); ・・・・・・5 printf("x = %f\n", x); ・・・・・・6 printf("x = %e\n", x); ・・・・・・7 }練習)、教科書32ページ「例題1」および「練習問題1」
出力したい変数が複数ある場合、引数をカンマ「,」で区切る。
例)、複数の変数の内容を出力する
/* 複数の変数の内容を出力するプログラム */ #include <stdio.h> main() { int year = 1972, month = 3, day = 28; printf("My Birthday\n"); printf("%d 年 %d 月 %d日\n", year, month, day); }
整数や実数のデータを桁数を指定して出力する。整数の場合は%とdの間に出力桁数(フィールド幅)を示す値を記述する。実数は%とfの間に「全体の桁、小数部の桁」を示す値を記述する。
練習)、教科書35ページの例題2及び練習問題2
printfの中の%と変換文字との間に次のオプション指示子を入れると、 さらに細かい書式制御ができるようになる。
printf("%_f・・・\n", a);
↑
「-」「[0]m」「.」「n」「l」
オプション 意味 プログラム例 −
(マイナス符号)変換された引数を左詰で出力。空いたところにはブランク(空白)が入る。 2 m
(桁数記入)データの確保すべき領域幅(フィールド幅)を最小でもm字の広さに取る。余った領域にはブランクが入る。桁数の先頭に0を付けるとブランクではなく0が入る。 4 .
(ピリオド)フィールド幅と文字数または小数点以下の桁数との区切り − n
(桁数記入)数値の場合は小数点以下の桁数。文字列の場合はその取り幅(文字の頭から) 7,8,9 l 対応する引数をlong型にする 6 例)、さらに細かい書式制御
/* さらに細かい書式制御の例 */ #include <stdio.h> main() { int i = 12345; long j = 123456789; double x = 123.456; char str[80] = "ABCDEFGHIJ"; printf("%20d\n", i); ・・・・・1 printf("%-20d\n", i); ・・・・・2 printf("%020d\n\n", i); ・・・・・3 printf("%10d\n", i); ・・・・・4 printf("%15d\n", i); ・・・・・4 printf("%20d\n\n", i); ・・・・・4 printf("%d\n", j); ・・・・・5 printf("%ld\n\n", j); ・・・・・6 printf("%f\n", x); printf("%20.1f\n", x); ・・・・・7 printf("%20.3f\n", x); ・・・・・8 printf("%20.5s\n", str); ・・・・・9 }
- フィールド幅20字・右詰
- フィールド幅20字・左詰
- フィールド幅20字・右詰・0埋め
- フィールド幅を変えた場合
- 単に%dなら、jの内容を正しく表示できない
- long型表示にすればOK
- フィールド幅20字・小数点以下1桁
- フィールド幅20字・小数点以下3桁
- フィールド幅20字・右詰・Aから5文字を表示
キーボードから値を入力させるにはいろいろな方法があるが、
ここでは書式付標準入力関数(scanf)
を使った入力方法を紹介する。
キーボードから入力した数字(整数)を、int型変数aに代入するプログラム。
/* 整数を入力するプログラム */ #include <stdio.h> main() { int a;scanf("%d", &a);printf("a = %d\n", a); }[解説]
%dはprintfと同じ書式制御記号であり、整数を表す。- 引数である変数aには、
&を付ける。- 引数に指定した変数の中に、キーボードから入力した整数が代入される。
(10と入力した場合、scanf("%d", &a);はa = 10;と同じ意味になる)[応用1]
複数の変数にそれぞれ値を入れるプログラム。
/* 2つの整数を入力するプログラム */ #include <stdio.h> main() { int a, b;scanf("%d", &a);scanf("%d", &b);printf("a = %d b = %d\n", a, b); }1つ目の数字を入力してリターンキーを押し、その後2つ目の数字を入力する。 [応用2]
複数の変数に同時に値を入れるプログラム。
/* 2つの整数を同時に入力するプログラム */ #include <stdio.h> main() { int a, b;scanf("%d %d", &a, &b);printf("a = %d b = %d\n", a, b); }1つ目の数字と2つ目の数字を同時に入力する。
数字の間には空白を入れる。[補足]
区切り文字は「半角空白」または「カンマ(,)」を使用する。 キーボードでの入力の際、scanf内で空白を指定した場合は空白を、 カンマを使った場合はカンマを使って数値を区切る。
練習問題
教科書37ページ例題3
キーボードから入力した実数を、double型変数aに代入するプログラム。
/* 実数を入力するプログラム */ #include <stdio.h> main() { double a; scanf("%lf", &a); printf("a = %f\n", a); }[解説]
%lfはprintfと同じ書式制御記号であり、実数を表す。(%fでは無い。ただしprintfの時は%fでもいいことに注意!)- 引数である変数aには、
&を付ける。- 入力データに整数を使ってもエラーとはならないし、正しく格納されるが、自動的に型変換が行われるため、実数を使うべきである。
練習問題
教科書37ページ練習問題3
キーボードから入力した文字(1文字のみ)を、char型変数aに代入するプログラム。
/* 文字(1文字)を入力するプログラム */ #include <stdio.h> main() { char a; scanf("%c", &a); printf("a = %c\n", a); }[解説]
%cはprintfと同じ書式制御記号であり、1文字を表す。- 引数である変数aには、
&を付ける。- 文字変数aにプログラム内で文字を代入する場合は、文字をシングルクォーテーションで囲む必要がある(a =
'C';)が、キーボードから入力する場合はシングルクォーテーションを付けずに入力する。
C言語には、文字列("KOGAKUIN"など)を格納する変数の型は存在しない。そのため、1文字を格納(char)する変数を配列にして、その配列の中に文字列を格納する。
[文字配列宣言方法]
例えば名前(最大20文字)を格納する変数を宣言するには,次のように指定する。
char name[21];文字列には、
文字列の終わりを示す文字(ヌル「\0」)が1文字入るため、最大文字数よりも1文字多く取る必要がある。[文字列入出力サンプル]
/* 名前を入力し、表示するプログラム */ #include <stdio.h> main() { char name[80]; printf("INPUT NAME : ");scanf("%s", name);printf("Your name is %s.\n", name); }[解説]
%sはprintfと同じ書式制御記号であり、文字列を表す。- 引数である変数nameには、
「&」は付かない。- 入力された文字列の最後には
ヌル('\0')が自動的に付けられる。[補足]
文字列入力時、区切り記号を入れるとその文字よりも前までのデータしか格納されない。例えば上記のプログラム実行時、「Taku Ando」と入力してリターンキーを押すと、区切り記号である
半角空白よりも前までしか変数に格納されない。よって、printfで出力されるのはTakuだけである。注意!!
文字配列宣言時に初期値として文字列を代入することはできるが、 プログラム内で代入することはできない。
○char name[80] = "Taku Ando"; ×name = "Taku Ando";練習問題
教科書41ページ例題4及び練習問題4
第3章1,2で、1文字を入力・出力する方法を学んだ。 ここでは文字についてもう少し詳しく解説する。
コンピュータで扱う文字は、文字コード(アスキーコード)という整数値(0〜127)に対応付けられている。C言語では、文字をシングルクォーテーションで囲んで表現する。例えばchar型変数cに「A」という文字を打乳する場合、
c = 'A';と記述するが、これは、文字「A」のアスキーコード「65」を代入するという意味である。[文字コードの例]
/* 入力した文字と、文字コードを表示するプログラム */ #include <stdio.h> main() { char a; scanf("%c", &a); printf("入力文字「%c」 アスキーコード「%d」\n", a, a); }[文字コード表を出力するプログラム]
/* 文字コード表 */ #include <stdio.h> main() { char c; for (c=32 ; c<=127 ; c++) printf("文字:%c コード:%d\n", c, c); }