3.標準入出力
この章では、標準入出力を利用するプログラムについて説明します。標準入力とはキーボード、標準出力とはディスプレイのことです。下記のサンプルプログラムは、キーボードからの入力を受け取って、ディスプレイに出力するプログラムです。
#include<stdio.h> int main(int argc, char *argv[]){ char name[64]; puts("What's your name?"); gets(name); printf("Your name is %s",name); return(0); }
3.1.配列
配列は、同じ変数名で操作される同じタイプのデータを集めたものです。 配列を使用するには、関数の先頭で宣言する必要があります。その形式は以下の通りです。
データ型名 変数名[サイズ];
サンプルプログラムでは、4行目でchar型の値64個を格納できる配列nameを宣言しています。つまりnameには64個のchar型データ、すなわち64文字のデータを格納することができます。
しかしC言語では、文字列の終わりに「\0」(ヌル文字)が自動的に挿入されるので、実際には、nameには63文字のデータしか格納することができません。
3.2.putsとgets
「puts」は引数として与えられた文字列を、標準出力に出力する関数です。サンプルの場合は、「What's your name?」とディスプレイに表示されます。下記のように引数を変数で与えられた場合は、変数内部のデータをディスプレイに出力します。
char name[]="yojigen"; puts(name);
「gets」はキーボードからのユーザーの入力を受け取り、引数で指定された変数に値を格納します。プログラムは、getsが呼ばれると、いったん停止してキーボードからの入力を待ちます。リターンキーが押されると、それまでに入力された文字列(リターンキーによる改行コードは除く)を読み取り、変数に値を格納し、プログラムの処理を再開します。サンプルプログラムの場合は、変数nameに値が格納されます。
なおこのサンプルプログラムをLinux上でコンパイルすると警告が表示されます。これはgetsの使用が推奨されないためです。getsは変数のサイズ以上(サンプルプログラムの場合は63文字以上)の入力があっても読み込んで、変数に割り当てられたメモリ上の領域を超えて強引に値を格納します。そのため、場合によっては他の変数のために割り当てられた領域を汚染する危険があります。
3.3.printf
「printf」は書式つき出力関数で、出力の書式を指定することができます。サンプルプログラムの場合、「%s」の部分がnameの値に置き換わって出力されます。
char name[]="taro"; int age=20; printf("%s's age is %d\n",name,age);
printfは第1引数の「%?」の部分を2番目以降の引数に、順次置き換えて表示します。上記の場合は、%s,%dがそれぞれ置き換わって「taro's age is 20」と表示されます。また書式では置き換える変数の型を指定する必要があり、%sは文字列%dは整数を意味しています。
printfはputsとは異なり、自動的には改行しません。改行したい場合は、明示的に改行文字「\n」を指定する必要があります。
(実習課題)
以下のプログラムを作成しなさい。
- 10個の文字列を格納できるchar型の変数(つまりchar型の2次元配列)を作成する。
- その変数にキーボードから入力された10個の文字列を格納する。
- キーボードからの入力文字列は最長63文字とする。
- 最後に、10個の文字列を順にコンソールに出力する。