【6時間目】キーボードから入力を取ってみよう
前回までに、変数を作ってそれを表示する、といったことをやってきました。ただ、その変数の中身は何度実行しても、コードを変えない限り固定されたままでした。
今回は、キーボードから入力を受け取って、変数の中身をコードを変えずに変更するようにしてみたいと思います。
scanf関数
キーボードから入力を得るにはscanf関数というものを使います。今の段階では、この関数の使い方はかなり難しく理解できないと思いますので、しばらくの間は呪文として覚えるほかないかと思います。
これの使い方が分かるようになるには、結構あとのほうで勉強するポインタという概念を理解している必要があるでしょう。
scanf関数の使い方
scanf関数を使って、変数hogeにキーボードからの入力を入れてみましょう。hoge = 3;の部分の代わりに、
scanf("%d", &hoge);
を書いてください。これで、キーボードから数字の入力を受け取ることができるようになりました。
変更後のコード
このままだと、何の入力を求めているのかよくわからないので、この前に少し表示を入れましょう。このコードの最終的な目標は、「入れた金額の消費税を計算して、それを出力する」といったような内容にしてみたいと思います。
実行してみよう
ここまでできたら、一度[Ctrl]+F5で実行してみてください。間違いなくコードを写した場合、エラーが発生するかと思います。scanf関数に関してのエラーですが、これはVisual C++を使っているが故のエラーです。
scanf関数は便利ではありますが、バグの原因になりやすい関数でもあるのです。そこでVisual C++は独自に、scanf_s関数という関数を定義して、こちらを使うように推奨していますが、これを使ってしまうとVisual C++以外、例えばgccやclangなどでは逆にエラーとなってしまいます。
そこで、今回はこのエラーを消すための対策をしなければなりません。このエラーのコード番号は4996で、このコード番号のエラーは無視するように設定するのです。
エラーコードの無視設定の方法
まず、ソースコードの画面をクリックした後に、プロジェクトから、[プロジェクト名]のプロパティーを選択します。
上のような画面が出て来たら、(1)構成を「すべての構成」へ、(2)「構成プロパティ」の、(3)「C/C++」の、(4)詳細設定を選んでください。そして、右側の画面に(5)「指定の警告を無効にする」という欄に「4996」と入力します。そして(6)適用を押した後に(7)OKを押します。
今度こそ実行
これでエラーが出なくなったはずなので、もう一度[Ctrl]+F5キーで実行してみましょう。
このように出てきたところで、プログラムは一時的に止まります。ではここで、キーボードから「100」と入れて、エンターを押してみましょう。
そうすると、hogeの中身は100です、と表示されたと思います。これで、キーボードから入力を取って、変数に入れることができましたね。たとえば200や、560などなどキーボードから入れてみると、しっかりとそれが反映されていることが分かると思います。
バグの原因になりやすいscanf関数
さきほどちょろっと言いましたが、このscanf関数はバグの原因になりやすく、気を付けるべき関数になります。では試しに、(やってみたという方もいるかもしれませんが、)意地悪して、数字ではなく適当な文字を入力してみるとどうでしょう。
あれま。わけのわからない数字が出てきましたね。この数字は、おそらく環境依存なので、数字が違っても大丈夫です。「こんな風に、変になってしまう」というところが重要なポイントになってきます。
次回、「変数の初期化」
このバグも、実は「変数の初期化」がされていないがためのバグです。変数を作った時、実は初めから値が入ってしまっています。これを知らずに変数を使ってしまったがために、こんな変な結果になってしまいました。
プロのプログラマーは、必ず変数を作るときに「初期化」を行います。次回は(おそらく短いですが)、とても重要なこと「変数の初期化」について勉強しましょう。
では今回はここまでにします。お疲れ様でした。