ラベル C言語入門 の投稿を表示しています。 すべての投稿を表示
ラベル C言語入門 の投稿を表示しています。 すべての投稿を表示

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 (数値型変数と演算)

C言語入門1 (文字列表示)

C言語を始める方を対象に解説記事を書きます。環境はLinuxを想定していますが、MacOSのターミナルでもほぼ同様のことができると思います。

 C言語で最小のプログラムを書いて実行する流れは次のとおりです。
  • エディタでプログラムを記述する
  • コンパイルする
  • 実行する 
エディタは、プログラムを入力/編集するためのツールです。Linuxだとvi系(vimなど)とEmacs系を使っている人が多いと思います。コンパイルとは、テキスト(人が書いた、文字として見えるプログラム)を実行可能な形式(バイナリとも呼ばれます)に変換することを意味します。

バイナリ形式は、(コンピュータにとって意味のある)数値の羅列ですが、人間にとっては非常に内容の認識が困難です。コンパイルされる前のテキストのプログラムをソースコード(または、ソース)ということもあります。ソースは、英語の起源を意味するsourceをそのまま日本語として使用しています。

エディタでプログラムを記述

次のソースコードを作成し、my_first.cという名前で保存してください
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        printf("Hello, World!\n");
        return EXIT_SUCCESS;
}

コンパイル

次のコマンドを実行してください。
$ gcc my_prog1.c -o my_prog1
エラーが表示されなければOKです。

実行

次のように実行してみてください。
$ ./my_prog1 
Hello, World!

解説

ソースコードの内容を見ていきましょう。 冒頭の2行に#includeから始まる文があります。 プログラムの中で使用する機能によって、このような#include文を適宜記載します。 このプログラムの場合、stdio.hの行は、後述するprintf()という機能を使用する際に必要で、 stdlib.hの行は、EXIT_SUCCESSという値を使う際に必要です。

次にint main(void)という行と中括弧{}で囲まれた範囲(だいぶ後で説明しますが関数と呼ばれます)があります。C言語では、このmain関数から実行が開始されます。逆に言えば、main関数がなければ、コンパイルがエラーになります。

関数の最初にprintf()という文があります。これは、文字列を画面に出力する命令です。この中に"Hello, World!\n"と書いたので、それが画面に出力されました。最後の\nは、「改行」を行う特殊な文字列です。また、C言語では、(#からはじまる行と関数の宣言を除いて)文の最後には; (セミコロン)が必要です。

最後のreturn EXIT_SUCCESS文は、このプログラムが正常に終了したことをシステムに通知するための行です。とりえあずは、決まり文句と考えておいてもよいでしょう。


次回

C言語入門2 (キー入力)