Visual Studioではscanf関数はそのままでは使えません。使用したい方はソースコードの冒頭に#pragma warning(disable: 4996)を記述してください

元気なscanf関数  

ピンポンぱんぽ~ん


ようこそ、蛇ショッピングセンターへいらっしゃいました。


突然ソーラーハウスに店内放送が響き渡る。



ソーラー 「な、なんだ」



お客様、当店では地域環境をまもるため植樹活動をおこなっております。


そのための募金をおこなっております。



ソーラー 「わあ、なんだかいいお話だね。」


アレサ 「まあ、本当」



ご協力いただけるお客様は


そちらに設置してあります蛇BOX



_



に募金をお入れください。


その際 募金金額は一口


A 1000000000000

B 50000000000

C 30000000


からお選びください。


ソーラー 「高いよ~~~。」


アレサ 「Aです。ソーラーさん」



みなさまのお手元の蛇BOX_にお入れください。



_    




新種の蛇 「さあ、ソーラー この_だよ」


ソーラー 「そうか、じゃあ A とうちこむよ」


ぽちっと


A


笑顔でAをうちこんでみるソーラー


新種の蛇 「がくっ」


力なくテーブルからぶらさがる彼。


ソーラー 「なんなんだ~~~~~


だっ 大丈夫かい?」


あわてて尻尾をつまみあげる。


ソーラー 「わわ、どうしよう。どうしよう。」


アレサ 「0111110000・・・そう、ですね・・・。


このscanfさんのプログラムを調べてみましょう。」


ソーラー 「そうだね。」


アレサ 


「では・・・このハサミでお蛇ちゃんをキットカットしましょう。」


新種の蛇 「むおお ま、待って


プログラムを調べるのなら


これ、これですよ~


#include <stdio.h>


int main(void){

int a;

printf("何か数値を入力してください。\n");

scanf ("%d",&a);

printf("入力した数値は%dです。\n",a);

return 0;

}


ソーラー 「コンパイルっ」



何か数値を入力してください。

_


ソーラー「ははあ、蛇BOX_があらわれたね。


コンパイルすると


つまりprintf("何か数値を入力してください。\n");の命令文


を実行して


何か数値を入力してください。


の文字列が


コマンドプロンプト画面に表示されたあと


scanf ("%d",&n);


の命令文が実行されて


数値入力をうけつけるための


アンダーバー _がコマンドプロンプト画面にあらわれる。


ってわけなんだ


この_に数値をキーボードから入力すればいいんだね。


何か数値入力されるまでは


アンダーバー _が点滅して数値入力待ち状態となっているわけだ。


そして


アンダーバー _に数値入力すると


さらに その次の命令文


printf("入力した数値は%dです。\n",n);


によって


入力された数値が出力されるっと。


たとえば


アンダーバー _に数値6を入力すると


入力した数値は6です。


と表示されるわけです。


では


円をscanf関数によみこませてみると


printf結果は・・・


入力した数値4198575です。か・・・


(Visual Studioの場合は

入力した数値-858993460です。となります)



ふ~ん、 モンスター数値をみなれているので


さほど驚かないね。」


アレサ 「そうですね。なにかがおこっていますね。」


ソーラー 「では


Aをscanf関数によみこませてみるとprintf結果は・・・


入力した数値4198575です。


ははあ、わかってきた。


このプログラム


#include <stdio.h>


int main(void){

int a;

printf("何か数値を入力してください。\n");

scanf ("%d",&a);

printf("入力した数値は%dです。\n",a);

return 0;

}


において


scanf ("%d",&a);は入力された数値を、


整数の型int型に宣言された変数aにおさめるわけだ。


だから整数の型int型には整数値しかおさめられないので


円やAはおさめることができず


変数aは初期化されることはないので


変数aが初期化されないときに


変数aに最初から格納されている


モンスター数値4198575がでてくるわけだ。


だから お蛇ちゃん 調子がわるくなったんだね。」


(ということは


int型をchar型に


%d出力変換指定子を%c出力変換指定子に


変更したなら


半角数字



半角英字を文字データとして


char型の変数aに


格納できることになるのです。


                       solarplexussより)


アレサ 「ははあ、なるほど・・・」


新種の蛇scanf 「そうなんで~す 。もぞ、もぞ・・・


だから、おいしいものをたべさせてほしいんだ(^^)」


ぺろりんっ


まな板の上でもぞもぞ体を左右に揺らし喜ぶ彼。


ソーラー 「しょうがないなあ。もう」


新種の蛇scanfをよいしょっと抱きかかえる。


ソーラー 「まあ、解体するつもりは最初からなかったけどね。」


アレサ 「ほんとうです。」


___________________________________________________


ここでアンダーバー _に


10000円を入力してみると


printf出力結果は10000となります。


円が入っているのに無事に出力できています。


ふつうは


printf関数に10000円と円の文字がついている数値を入力しても


#include <stdio.h>


int main(void){

printf("入力した数値は%dです。\n",10000円);

return 0;

}

ファイル「C:/Users/solarplexus/AppData/Local/EasyIDEC/project/tttttt/main.c」の

「4行目」で記述エラーを発見しました。

unrecognized character \x89


(unrecognized characterとは認識できない文字という意味で


ここでは円をさしています。)


となりコンパイルエラーになります。


ここがC言語の不思議なところですね。


でも、きっと理由があるのでしょう。


元気なscanf関数さん


よろしくね!


                  solarplexussより


お話を読み進めていくとこの理由が自然とわかってきます。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます