ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

C言語にトライしてみた

今年の抱負は“C言語を覚える”なので、さっき触れ合い程度にC言語(VC++)でプログラムを書いてみました。

もちろんCLIじゃなくてネイティブのほうです。
C言語を書くの初めてですね…。

VS2012 Expressは最初からC言語(VC++)の開発が出来るのでいいですね。
VS2010の頃からちゃっかりVC++ Expressも入れていたんですけどね…。

さてさて、C言語は未経験の私も、プログラミングというものに関しては結構な経験者です。

なので基本的な仕組みやルールは簡単に分かりました。

#includeはC#にはありませんが、どういうものなのかは仕組みとして理解できます。


と言う訳で、まずprintfを実行する処理を書いてみました。

stringがなかったり、常識のようにポインタが使われていたりで、やはり勝手が違いますね。

今回は、型を気にせず、string感覚で"文字列"とやっていましたが
恐らく正体は char[] なんでしょうね。

そういうのも時間を掛けて覚えていきたいと思います。


お次は、"stdio.h"を#includeしてscanfを使用してみました。

AsaBonさんの記事のお世話になりました。


scanfも、Console.ReadLineとは全く勝手が違いますね。

型などの指定を書式付き文字列でやるなんてふざけるなと言いたくなります。

そして相変わらずのポインタですね…。



さて、scanfのプログラムを実行しようと思ったら謎のコンパイルエラーが1つ出たんですよ。

そして、エラーの説明文が英語だったので分からなかったんです。

私がC言語初心者だということは自覚しておりますから、文法間違いも疑いました。

しかし、やはり文法はあっていると思いますし、
ちゃんと入門サイトのサンプルコードと同じものを書いたのですから、間違っているはずがありません。

と言う訳で、その英語のエラーの説明文をGoogle検索したら、同じような方がたくさんいました。


エラーの原因は何かといいますと、文法はあっているのですが、コード中で使用している
“scanf”関数がダメだったようです。

どうやらscanf関数にはバグがあるようでして、実用的ではないらしく、
Microsoftは独自にバグを改善したscanf_s関数というものを作ったそうなのです。

そのため、MicrosoftのVC++でscanf関数を使用した場合、
「scanfはバグ出るよ。scanf_sを使ってね。」
と言っているようです。

実際の開発では素直にscanf_sを使うのが良いらしいのですが、scanfとscanf_sは勝手が少し違うため、
入門者は警告レベルを下げてscanf関数を有効にするのがよろしい、とYahoo!知恵袋の某質問ではありました。

確かにscanf_sがあるのはMicrosoftだけですもんね。

そこで、知恵袋に書いてあった通り
#pragmaなんたら…と書いて、scanf関数を使えるようにしました。

そしたら動きました。

相変わらずのポインタでしたけど(笑)

char型の変数に結果を入れてみたので、一文字目しか読み込めませんでしたが、

今度は文字列(char[] ?)も読み込めるようになりたいと思います。



初めてのC言語プログラミングで、
printfとscanfのプログラムを組んだという記事でした。

tag:

コメント

そうだったんですね。
次回のC言語講座でscanf_sについて少し触れるつもりです。

  • 2013/02/15(金) 22:03:02 |
  • URL |
  • AsaBon #-
  • [ 編集 ]

Re: AsaBon

printfではエラーは出ませんが、printf_sというのもあるみたいですよ。

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/240-40a716f9
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。