C言語入門(キーボードからの入力)

C言語

どうもサンチョです!
前回お詫びした通り、今回はすっかり忘れていたキーボードからの入力に触れていきます。
いや~…ノリノリで失敗してしまったのが恥ずかしい(*ノωノ)

前回の練習問題の解答例

【問1】最大公約数を求めるプログラムをdo-whileに書き換える内容でした。
※前回の練習問題はこちら⇒C言語入門(ループ処理その3:do-while文)の練習問題

#include<stdio.h>
int main() {
    int num1, num2, tmp;
    num1 = 81;
    num2 = 12;
    tmp = num1 % num2;
    do{
        num1 = num2;
        num2 = tmp;
        tmp = num1 % num2;
    } while (tmp != 0);
    printf("最大公約数は%dです。",num2);
}

これはちょっと簡単すぎたかな?
まぁdo-while文を自分で書く練習をするのが目的だったので
これはこれでOKということでお願いします。。。

キーボードからの入力

前回の練習問題では「最大公約数」を求めるプログラムを作成しましたが、
例に挙げたケース以外の値を試したい場合はプログラムの修正が必要です。
もし複数のケースを確認することになったら、このやり方だと大変ですね。

しかし、入力関数を用いれば、プログラムを修正することなく
確認したい値を変数に代入することができます。

scanf関数

C言語を学ぶ上でポピュラーな入力関数です。
まずはいつものようにサンプルでイメージをつかんでください。

このサンプルは、入力された値をそのまま表示するプログラムです。
※値を入力したらEnterキーを押してみてください。
どこで何をしているか、イメージしながら実行してみてください。

#include<stdio.h>
int main() {
    int i;
    printf("値を入力してください:");
    scanf("%d",&i);
    printf("入力された値:%d\n",i);
}

エラーが発生した場合

SDL(Security Development Lifecycle)が有効だと、
使い方によってはセキュリティ上の問題を起こし得る
旧式の関数を使用するとエラーが出ます。

上記のプログラムをVisualStudioで実行した際にエラーが発生したら、
次の手順でVisualStudioのSDL(Security Development Lifecycle)チェックを無効にしましょう。

①メニューバーにある「プロジェクト」から「プロパティ」をクリックする。
②「構成のプロパティ」→「C/C++」→「全般」をクリックする。
③「SDLチェック」を「いいえ(/sdl-)」に変更する。
④「適用」→「OK」とクリックする。

scanfの構成要素

scanfは次の要素で構成されています。

scanf("変換指定子",&値を代入したい変数名);

変換指定子printf文で使用していたものと同じです。
ここに文字を入力しても表示されないので注意してください。

scanfが実行されると、キーボードから値が入力されるのを待つ状態になります。
値が入力されたら&値を代入したい変数名に設定された変数に代入されます。

因みに変数名の前についている「」は
変数のアドレスを参照するときに用いられるものです。

以前書いた記事の「はじめての変数宣言と代入」ではこう説明しました。

変数とはメモリ領域の一部分に名前を付けたもの。
本来メモリ領域には番地が割り振られている。

変数からメモリの番地を参照するときに「」を付けるんですが、
これはポインタを学ぶまでよく分からないと思うので
今は「そういうものだ」と割り切って覚えてください。

SDLチェックに引っかからないscanf_s関数

scanf_sはscanf関数から派生した関数です。
セキュリティが強化されているので、こちらを用いればSDLチェックによる
エラーが発生することはありません。

構成要素はscanf関数と変わりません。

scanf_s("変換指定子",&値を代入したい変数名);

練習問題

【問1】
2つの整数を四則演算と剰余演算して結果を表示するプログラムを作成してください。
尚、2つの整数はキーボードから入力するものとします。

まとめ

今回はキーボードから値を入力する方法を紹介しました。

簡単にまとめると以下の通りです。
・キーボードからの入力は入力関数を用いることで変数に代入できる。
・入力関数を用いれば、プログラムを修正することなく
確認したい値を変数に自由に代入することができる。
・入力関数の中でもよく使用されるものにscanf関数scanf_s関数がある。
scanf関数はセキュリティに問題があり、SDLチェックを無効化しないと
処理の実行時にエラーが発生する。一方scanf_sはエラーが発生しない。

長くなってしまったので、条件分岐(if文)は次回触れます。
では、今回もお疲れ様でした!

コメント

タイトルとURLをコピーしました