ぷろぐらみんぐ!

プログラマーを目指して勉強する大学生のブログ

scanf関数、scanf_s関数どっちを使うべき? C#4

こんにちは!

 

今日は入力用の関数というところから始めていきたいと思います。

今回は新しい関数が出てきます!

それでは早速まとめます。

 

 

・キーボードからデータを入力するにはscanf関数を使う。

・scanf関数は下のようにして使う。

scanf("入力変換指定子",&変数名);

・入力変換指定子とは入力された数字をどのような数値に変換するかを表す文字のこと。

・scanf関数を使うには#include<stdio.h>を最初に書く必要がある。

・scanf関数で実数を入力する場合は%lf指定子を使う。

 

 

データ入力用の関数が新しく出てきました!

scanf関数を使ってみよう!ということで、サンプルプログラムを書き写してみました。

さっそく実行してみたところエラーが出ました。

 

f:id:fujigg7:20170212204846p:plain

 

これで実行してみると、

 

f:id:fujigg7:20170212204721p:plain

 

こうなりました。

 

f:id:fujigg7:20170212204944p:plain

 

打ち間違いはないはずです。

なのになぜエラーになったのか説明を読んでみると、

 

'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のプロパティをクリック。

f:id:fujigg7:20170212211745p:plain

左の欄の構成プロパティ、C/C++、全般と進んだ後、右のところにあるSDLチェックをいいえになるまでクリックします。

いいえになったら、適用、OKをクリックします。

 

これで設定は完了です。

さっきのプログラムを動かしてみます。

 

f:id:fujigg7:20170212212202p:plain

 

ちゃんと動きました!

ここで123と入力してみると、

 

f:id:fujigg7:20170212212254p:plain

 

123が入力できます。

そのあとprintf関数もしっかり動いていますね!

 

それでは次に進みます。

 

次は本格的なプログラム作成です!

数学で習ったΣの計算ができるプログラムを書いていきます!

サンプルプログラムを書き写して実行!

 

f:id:fujigg7:20170212214159p:plain

 

出来た!

 

f:id:fujigg7:20170212214345p:plain

 

計算もちゃんと合ってます!

 

プログラムが少しずつ本格的になってきました。

プログラミングには数学の知識も必要なんですね!

 

今回はもう少し進みます。

次はscanf関数に問題があることを学びます。

ってこれ、さっき調べちゃいましたね。

とりあえずさらっとまとめます。

 

・scanf関数は区切り記号を間違えたり、大きすぎる数値、文字列を打ち込まれてしまうと結果がめちゃくちゃになる。

 

解決法は今の段階では難しいのでもっと勉強が進んでから学ぶそうです。

 

ここまで読んだら練習問題です。

 

 

f:id:fujigg7:20170212221136p:plain

 

プログラム書取問題もいい感じです。

 

 

今回はここまでにしたいと思います。

今回はΣの計算が出てきました。

プログラミングの勉強だけでなく、数学も頑張らないといけないですね。

次回はif文が出てきます。

なんとなくプログラミングといえばif文というイメージがあったのですごく楽しみです!

 

 

それでは

 

変数なんて簡単簡単 C#3

こんにちは!

 

今回は数値の計算から始めていきたいと思います。

プログラミング言語は数値を計算するための言語だと勉強したので、気合い入れて頑張っていこうと思います。

 

 

C言語では数値と数字を区別して扱う。

C言語において""の中に書かれている文字や数字を文字列(文字列リテラル)という。

・数値を書きたい場合は""で囲わずに書く。

・数字は計算に使えず、数値は計算に使える。

・printf関数で数値を表現するには出力変換指定子を使う。

出力変換指定子とは外部のデータを文字列に変換して表示するときに、その変換方法を指定する記号。

・整数値を文字列に変換するには%d指定子を使う。

 

 

あまり耳慣れない言葉がいくつか出てきました。

出力変換指定子がよくわからなかったのですが、サンプルプログラムを書き写して実行してみると簡単にわかりました。

 

f:id:fujigg7:20170211035032p:plain

 

簡単に言うと、

""の中に数値を書きたいがそのまま書いてしまうと数字になってしまう。だから代わりに%dという記号を使って、後から数字を代入する

ということです。(長文になると簡単に見えない...)

 

続きをやっていきます!

 

 

C言語では掛け算の計算記号を * 、割り算を / で表す。(+,- はそのまま)

・% を使えば割り算した時の余り計算することができる。

・数値を整数として計算する時は少数以下は切り捨てられ、整数となる。

・数式の計算する順番は数学と同じ。

 

 

ここら辺はまだまだ余裕ですね。

どんどん先に進みます。

 

 

C言語では数値を整数と実数(浮動小数)の2種類に分類して扱う。

・整数とは、負の数と0と自然数のこと。

・実数とは、小数を含む数のこと。

・整数は10進数、8進数、16進数の3種類の書き方が出来る。

・数字をそのまま書けば10進数、数字の前に0を付ければ8進数、0xを付ければ16進数になる。

・実数を数字に変換するには %f 指定子を使う。

 

 

一見難しいことが書いてありますが、読んでみるとそうでもありませんでした。

次は練習問題です。

 

f:id:fujigg7:20170211042311p:plain

 

余裕です!

まだまだ進みましょう!

 

 

次は数値の記憶ということで、ついに変数が出てきます。

どんどんプログラミングっぽくなってきますね!

それでは簡単にまとめます。

 

 

・変数とは数値を保管するための箱のようなもの。

・変数に名前を付けることを変数を宣言するという。

・変数を宣言するには、型名 変数名; と書く。

・型名とは記憶しておきたい数値の種類を表す名前。

・今は整数を意味する int という型名を覚えておく。

・変数名とは変数に付ける名前のこと。

・変数に数値を記憶させるには、 変数名 = 数値; と書く。

・なお、= は右辺と左辺が等しいという数学的な意味ではなく、右辺の数値を左辺に代入するという意味。

f:id:fujigg7:20170211044722p:plain

f:id:fujigg7:20170211045321p:plain

 

少しずつまとめる内容が多くなってきました。

変数は数学でよく出てくる x のみたいなものなんでしょうか?

= の意味には要注意ですね。

←に置きかえたらわかりやすいみたいです。

ひととおり演算子を覚えたら次へ進みましょう。

 

C言語にはさまざまな種類の数値があり、それをデータ型と呼ぶことがある。

・整数を記憶する int 型、実数を意味する double 型、今はこの2種類のデータ型を覚えておく。

・整数と実数で計算を行った場合、結果は実数に変換される。

・型を強制的に変換する場合キャスト変換という機能を使う。

・キャスト変換をするには、下のように書く。

(変換する型名) 数値や変換名

・printf関数は、出力変換指定子の間に数字を入れると、その数字分の桁に揃えて表示してくれるという機能を持つ。

また、桁数の前に0を付けると、空白の代わりに0を付けて桁を揃えてくれる。

・実数値の桁数を揃えるには下のように書く。

%全体桁数.小数桁数f

全体桁数は小数の桁数と小数点を含むことに注意。

 

データ型の方は理解しやすいですが、桁揃えには少しややこしいですね。

特に実数値に注意。

 

 

次は練習問題です。

 

 

f:id:fujigg7:20170211062039p:plain

 

今回はプログラム書き取り問題に少し苦戦しました。

少し苦戦した分、うまくいったときは今まで以上にうれしかったです!

 

 

いつの間にか1600文字を超えていたので今回はここまでにしたいと思います。

今回でかなりプログラミングっぽい内容になってきました。

すごく楽しくなってきたのでこれからも毎日頑張っていきたいと思います!

 

 

それでは。

プログラムの書き方 C#2

こんにちは!

 

今日も前の続きをしていきます。

今日はプログラムの書き方のルールから勉強していきます。

早速まとめてみると、

 

C言語では単語のことをトークンと呼ぶ。

トークンをつなげない限り、自由に書いていい。(改行、スペース自由に入れていい)

・大文字と小文字を区別する。

・全角文字は使えない、半角のみ使える。

・インデントとは右に字をずらすこと

・自由に書いてもいいのだが、読みやすくするためにインデントをする。

・プログラムを読みやすくするためにコメントを書く。

・コメントは説明文のことで、 /**/ と書く。

 

となります。

ここで大事なことは大文字小文字を区別することと、インデントとコメントですかね。

 

次は、画面に文字列を表示させる方法について学びます。

 

・printf("文字列");

 

これを使うと画面に文字列を表示できます。

C言語の開発環境構築の時に使いましたね。

 

次に疑似命令について学びます。

 

・疑似命令はプログラムコードでない命令。

・#includeは説明書を渡す役割を果たす。<>の中身が説明書にあたる。

・#include <stdio.h> と書けばprintf関数が使えるようになる。

・疑似命令は一番最初に書く。(関数の外に書ける)

 

ここは少しわかりにくい内容ですが、勉強を進めるうちに理解を深めていければと思います。

 

ここまで来たらようやくプログラムが書けます!

早速書いてみましょう!

 

f:id:fujigg7:20170209030401p:plain

 

さっそく実行!

 

f:id:fujigg7:20170209030533p:plain

 

hello!

うまくいきました!

たった数行の文章ですが、自分で書いたプログラムが動いたときは感動しますね。

 

 

どんどん先に進みます。

次は改行を行うための方法を学びます。

改行はエスケープシーケンスというものを使って行います。

エスケープシーケンスとは画面に表示できないような処理を行うときに使う特殊文字のことです。

改行をするには\nを使います。

 \はお使いのpc環境によっては¥になることがありますが、同じ記号なので大丈夫です。

 

f:id:fujigg7:20170209094648p:plain

 

printf関数内の文字列に\nを付け足した後、実行してみると、、、

 

f:id:fujigg7:20170209094742p:plain

 

hello!の後ろに改行が入っています。

エスケープシーケンスを使っていない時よりも読みやすくなりましたね。

 

ほかにも\tというエスケープシーケンスもよく使うみたいですので覚えておきましょう。

\tを使うとタブを挿入し、文字列をそろえて表示することができます。

 

 

次は練習問題です。

まだ始めたばかりなので問題も簡単ですね。

 

f:id:fujigg7:20170209100948p:plain

 

プログラム書取問題もクリアしました!

 

まだまだ進めそうですが、そろそろ1000文字を超えてきたので明日の記事に書きたいと思います。

 

それでは。