Ruby言語で、キーボードから値を読み込むときはたとえば次のようにした。
line = gets
これは、line という変数に、(デフォルトで)キーボードから
読んだ文字列を代入するものである。入力する文字数が何文字でも構わない。
C言語では、「何文字でも良いから入力する」という融通のきいたことは 基本的にできない。なぜなら文字列は「配列」なので、決めた大きさよりも大き なものにはできない。あらかじめ「最大でこのくらい」という文字数を考えて それが入るだけ char 型配列を用意しておく必要がある。
「最大で100文字くらいかな」と見積もって文字列を読み込むには、 以下のようにする。
〜略〜 char line[100]; 〜略〜 fgets(line, sizeof line, stdin);
これで登場するキーワードに付いて説明する。
fgets - ストリームからの行入力
指定したストリームから指定した長さの文字列を読み込み 指定したアドレスに書き込む。
fgets(格納場所, 最大長さ, ストリーム)
格納場所 には十分な長さで確保したchar型配列を
指定する。最大長さ にはその配列に読み込めるサイズを指定
する。通常 sizeof(次項参照) を使うと良い。
ストリーム には、しばらくの間 stdin を
指定すると覚えておけば良い。
sizeof - 変数の大きさを返してくれるキーワード
sizeof 変数 または sizeof 型名
とすると、その変数(あるいは型)を記憶するのに必要なバイトサイズ が得られる。
char line[100]; sizeof line;
とした場合、lineが100バイトの領域になっているので、
sizeof line は100になる。
stdin - 標準入力ストリーム
標準ではキーボードからの入力を示すキーワードと考えて良い。
以下のプログラム aisatsu.cを
作成し、コンパイル&実行せよ。
#include <stdio.h>
int main()
{
char name[100];
printf("あなたの名前は? ");
fgets(name, sizeof name, stdin);
printf("こんにちは, %s さん!\n", name);
}