scanf関数、scanf_s関数どっちを使うべき? C#4
こんにちは!
今日は入力用の関数というところから始めていきたいと思います。
今回は新しい関数が出てきます!
それでは早速まとめます。
・キーボードからデータを入力するにはscanf関数を使う。
・scanf関数は下のようにして使う。
scanf("入力変換指定子",&変数名);
・入力変換指定子とは入力された数字をどのような数値に変換するかを表す文字のこと。
・scanf関数を使うには#include<stdio.h>を最初に書く必要がある。
・scanf関数で実数を入力する場合は%lf指定子を使う。
データ入力用の関数が新しく出てきました!
scanf関数を使ってみよう!ということで、サンプルプログラムを書き写してみました。
さっそく実行してみたところエラーが出ました。
これで実行してみると、
こうなりました。
打ち間違いはないはずです。
なのになぜエラーになったのか説明を読んでみると、
'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
グーグル翻訳してみると、
'scanf':この関数または変数は危険です。 代わりにscanf_sの使用を検討してください。 廃止予定を無効にするには、_CRT_SECURE_NO_WARNINGSを使用してください。 詳細については、オンラインヘルプを参照してください。
とのことです。
scanf関数が危険!?
今習ったばっかりの関数が危険というのはどういうことなのでしょうか。
scanf関数と、scanf_s関数について少し調べてみました。
scanf関数を使った場合、入力時に長い文字列を打ちこまれた時にエラーになります。
そしてそのエラーを利用してハッキングされる可能性があるのでscanf関数は危険ということみたいです。
scanf_s関数は入力される文字列の数を指定できるため、このような問題が起こることがなく安全だということらしいです。
今作っているプログラムを公開することはないので、scanf関数をVisual Studioで使えるようにします。
上のバーから、プロジェクト、Projectのプロパティをクリック。
左の欄の構成プロパティ、C/C++、全般と進んだ後、右のところにあるSDLチェックをいいえになるまでクリックします。
いいえになったら、適用、OKをクリックします。
これで設定は完了です。
さっきのプログラムを動かしてみます。
ちゃんと動きました!
ここで123と入力してみると、
123が入力できます。
そのあとprintf関数もしっかり動いていますね!
それでは次に進みます。
次は本格的なプログラム作成です!
数学で習ったΣの計算ができるプログラムを書いていきます!
サンプルプログラムを書き写して実行!
出来た!
計算もちゃんと合ってます!
プログラムが少しずつ本格的になってきました。
プログラミングには数学の知識も必要なんですね!
今回はもう少し進みます。
次はscanf関数に問題があることを学びます。
ってこれ、さっき調べちゃいましたね。
とりあえずさらっとまとめます。
・scanf関数は区切り記号を間違えたり、大きすぎる数値、文字列を打ち込まれてしまうと結果がめちゃくちゃになる。
解決法は今の段階では難しいのでもっと勉強が進んでから学ぶそうです。
ここまで読んだら練習問題です。
プログラム書取問題もいい感じです。
今回はここまでにしたいと思います。
今回はΣの計算が出てきました。
プログラミングの勉強だけでなく、数学も頑張らないといけないですね。
次回はif文が出てきます。
なんとなくプログラミングといえばif文というイメージがあったのですごく楽しみです!
それでは