前回、標準入出力の出力側を説明しましたが、今回は入力側です。つまり、キーボードからの入力をプログラム内に取り込んで、変数に格納し、計算に用いたりすることが出来るようになります。とりあえず、次のプログラムを実行して見てください。
#include
main()
{
int a;
printf( "数字を入力してください。>" );
scanf( "%d", &a );
printf( "\nあなたが入力した値は %d です。\n", a );
return 1;
}
このプログラムを実行して、数字を入れた後、リターンキーを押すと出力側のデータに入力した数字が反映されています。
ここで、上のプログラムの説明をします。前々回、変数の説明をしましたが、具体的な使用法は説明しませんでした。変数には型があることを説明しましたが、もう一つ大切なものに、「名前」があります。上の例では、int 型の変数「a」を使用しています。変数は使用する前に必ず「宣言」をしなければなりません。上の例では「int a;」が宣言にあたります。要するに、「a」という名前の int 型の変数を使いますよ、と言っているイメージです。よって、以降、「a」という記述があるとそれは int 型の変数を表していることになります。「a」という名前に関して、あくまでもプログラム内の名前なので、自分の好きなように命名することが出来ます。ただ、命名法には制限があって、1文字以上で半角文字、英字もしくは「_」(アンダーバー)で始まる、というものです。スペースも使えません。文字数に制限があったように思いますが、不必要に長くしなければまず、大丈夫だと思います。2文字目以降は数字も使っても大丈夫です。
「int a;」の行を一行目とすると、2行目は特に問題無く理解してもらえると思います。はじめのサンプルプログラムと同じです。ただ、日本語を使っているだけで。最後に「\n」がありませんが、ある時と無いときでの動作の違いを確認しておいてください。「\n」をつけなかった意味が分かりますか?
次に3行目を飛ばして、4行目。4行目も基本的に前回と同じです。ただ、挿入するデータの指定(第二引数)方法が定数から変数に変わっています。前回は第二引数以降に定数を指定していたので、一通りの出力結果しか得られませんが、今回のように変数を用いると変数にどんなデータが入っているかによって、いろいろな出力結果を得ることが出来ます。これは変数を用いるメリットといえるでしょう。第二引数に「a」と書いているのに、「あなたが入力した値は a です。」と出力されないのは、「a」をダブルクォーテーション、若しくはシングルクォーテーションでくくっていないからです。すなわち、「a」を文字として使いたいときは、各クォーテーションをつけます。ここではコンパイラには変数として認識されます。
初心者にありがちなのは、変数名なのか、関数名なのか、定数なのかを見分けられないというものです。文字の定数ならば、ダブルクォーテーション("")、シングルクォーテーション('')のどちらかで挟んであるし、数値の定数ならば、数値単独で用いていいます。(変数名の命名法より、変数名一文字目に数字を使うことはできない) 関数は引数を括弧「()」で挟んであります。この括弧は引数が無い場合もつけなくてはなりません。よって、変数名、関数名、定数を簡単に見分けることが今までの説明した範囲では容易です。
これで、残すは3行目のみとなりました。scanf() 関数はキーボードの入力を変数に格納するという、ごく基本的な関数です。使用方法は printf() 関数に似ていて、第一引数に取り込むデータの型、第二引数以降に格納する変数を指定します。printf() 関数と違う点は第二引数以降の変数の前にアンパサンド記号「&」がついていることです。このアンパサンドの役割を説明し出すと、長くなりそうなのでとりあえず、日本人にお得意の先送りにするとして、今の段階では「アンパサンドをつける」と覚えておいてください。プログラムは二行目から実行が始まり、3行目でいったん止まります。そしてユーザがデータを入力してリターンキーを押すと変数「a」にキーボードからの入力データが格納されて実行が再開し、4行目で入力データを用いて結果表示をしています。
実はこの scanf() 関数、「使えない」関数の代表的存在であったりします。C言語をマスターしていく段階で理由はわかってくると思いますが、とりあえず、ここまででキーボードからデータを入力して、何らかの処理をしてから、結果を表示することが出来るようになりました。