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); }