C言語入門2 (文字入力)

今回は、キーボードから文字を入力してみましょう。 次のmy_prog2.cというファイルを用意します。
#include <stdio.h>
#include <stdlib.h>

#define MAX_NAME_LENGTH 100

int main(void)
{
        char name[MAX_NAME_LENGTH];
        printf("What are your name ? : ");
        fgets(name, MAX_NAME_LENGTH, stdin);
        printf("Hello, %s\n", name);
        return EXIT_SUCCESS;
}
これを前回と同じく次のようにビルドします。
$ gcc my_prog2.c -o my_prog2
さて、実行させると次のようになります。
$ ./my_prog2 
What are your name ? :
ここで、Lionと入力してみましょう。
$ ./my_prog2 
What are your name ? : Lion  (キーボードで入力する)
Hello, Lion

そうすると、Hello, [入力した名前]が表示されました。

解説

今回、新しく下記の4つの事柄が出てきました。それぞれ説明していきます。
  • #define文
  • 文字を格納する変数(name)
  • fgets関数
  • printfの中の%s

#define文

#defineの後には、通常、2つの語が並びます。この文はこれ以降に出現する1つ目の単語を2つ目の単語に置換します。 今回の例ですと、MAX_NAME_LENGTHが100に置換されるので、name[MAX_NAME_LENGTH]はname[100]と書いた場合と同じになります。
では、なぜ、わざわざこのような面倒なことをするのでしょうか?それには、主に2つ理由があります。 1つは、複数回使用される数値をこのように定義しておくと、数値の変更が必要なとき、#define行の値を変えるだけで対応できること。 もう1つは、その数値が何を表しているのかが分かりやすくなるためです。

文字を格納する変数(name)

キーボードから文字列を入力するには、それを格納するための場所が必要になります。C言語では、文字列や数字などを格納するものを変数と呼びます。 変数は、使用する前に、その種類と名前を宣言しなければなりません。 このプログラムの場合、種類は文字列(char)で名前はnameです。 さらに、文字列の場合、格納できる最大文字数も、次の形式で一緒に指定する必要があります。
    char 変数名[最大の文字数];

fgets関数

fgets()関数は、キーボードから文字列を受付け、変数に格納します。括弧の中にコンマで区切られた3つの単語があります。 それぞれの語を引数(ひきすう)といいます。左側から第一引数、第二引数、第三引数とも呼ばれます。fgets()の第一引数には、入力を格納する文字列用の変数を指定します。 第二引数には、その変数に格納できる最大の文字数を指定します。第三引数にはstdinという語を指定しています。これは、キーボードから入力することを意味します。

printf関数の中の%s

printf()の第一引数の文字列の中に%sがあり、第二引数に文字列の変数が指定されている場合、%sがその変数の内容に置換されて画面に出力されます。 なので、このサンプルでは入力した文字列が、そのまま%sの箇所に出力されています。

次回

C言語入門3 (数値型変数と演算)

0 件のコメント: