創作ファンタジー こうしてヘッダファイル<stdio.h>にscanfとprintfは格納されるようになったのか? 0.18
新種の蛇 scanf
「は~、よくわらった~~~」
ソーラー 「この肌触りがたまらないんだな。これが(^^)」
新種の蛇 scanf
「わ~っおいしかったな~
非常に美味でした。うね。うね。」
ぺろっぺろ
ソーラー 「わっ、くすぐったい。蛇になめられちゃった。」
アレサ「お蛇さんの住処は ヘッダファイル<stdio.h>なのですか・・」
新種の蛇 scanf
「え~どうだったかな~僕は?長い間お外で遊んでたから、
てへへ・・・忘れちゃった ぺろっ」
ソーラー 「もう、しょうがないなあ。」
蛇を抱きかかえなおす。
ソーラー 「それにしても
#pragma warning(disable: 4996)
#include <stdio.h>
int main(void){
float n;
printf("何か数値を入力してください。\n");
scanf ("%f",&n);
printf("入力した数値は%fです。\n",n);
return 0;
}
このプログラムのように
scanf ("%f",&n);
で取り込んだ数値は
コマンドプロンプト画面に表示する際は
printf関数を使って出力させるしかないよね。」
アレサ「✲✲✲0111111000000000✲✲✲・・・・・
はい、そのようです。
はっ、もしや scanf関数とprintf関数が同じヘッダファイル <stdio.h>に
入っているのは
(scanf関数を使用するにはヘッダファイル <stdio.h>をインクルードする必要があります)
scanf関数をつかうときには必ずprintf関数をつかわなければ
ならないからではないのですか。」
ソーラー 「そうだねえ。
その点については・・・
こんな具合だったんじゃないかな?
・・・
すこし時代をさかのぼって
printf関数や
scanf関数がつくられた時代をのぞいてみよっっ
以下は創作ファンタジーです。
今から50億年前
無も有もない時代
ビッグバンによって宇宙が誕生する。
宇宙は光速をこえるスピードで膨張をつづけ
そのなかから
いくつかの銀河が生まれ
さらにその中から
太陽系が生まれる。
solarplexuss 「おおおっ(´∀`;)」
そして、太陽からちょうどよい距離をたもっていた地球に生命が
誕生する・・・
それは今から30億年まえのことだった・・・
solarplexuss 「おおおおおっ(´∀`;)
て、遡りすぎじゃ~~い。」
それでは時代は生命誕生からくだって・・・
遠い遠い昔のこと、C言語もまだできてない時代。
コンピューターの黎明期
しばらくの間
コンピュータは単純な数値計算のみ
足し算、掛け算程度しか計算する必要がありませんでした。
数値計算するプログラムを
ゼロからアセンブリを使って作製し→
(プログラミング言語のことです
この当時 C言語はなく アセンブリというプログラミング言語が使われ
ていました)
→
おばちゃんたちによるハンドアセンブラ(C言語でコンパイルにあたる)
により機械語に変換後
その機械語プログラムをエディタ(編集機)をつかって
紙テープにプログラムとなるパンチ穴をあけてから
(このころのエディタは いまのように
パソコン画面上にプログラムを記述する画面というものでなく
紙テープにプログラムを表すパンチ穴をあけるという
まさに編集機だった)
その紙テープを
コンピュータによみこませ
数値計算を実行し
でてきた数値計算結果を
紙テープにパンチ穴をあけて表示する
それだけで十分だった。
いや~ほんと十分だった。
だって数値計算しかしないんだもん。
そ~なので
紙テープにプログラムとなるパンチ穴をあけるので
キーボードもなければ
計算結果も紙テープにパンチ穴をあけて表示するので
コマンドプロンプト画面も必要ありませんでした
そう
現在のscanf関数を実行したときのような
直接キーボードからコマンドプロンプト画面上に数値を
打ち込みコンピュータのメモリへ
その数値データを格納できる
そのようなコマンドプロンプト画面のようなもの
は必要でなかった・・・
そのうち
紙テープに数値だけでなく
(数値といってもパンチ穴をあけて数値を表現しているだけです)
文字を表示させたい
(文字といってもパンチ穴をあけて文字を表現しているだけです)
ということで
🍊数値🍊でなく
🍎文字🍎の
紙テープに穴をあける出力表示に関しても
🍑ある文字🍑を
紙テープに穴をあける出力表示させるときには
🍑ある文字🍑を
紙テープに穴をあける出力表示プログラムを
ゼロからアセンブリをくみあわせて作製、
おばちゃんたちによって
ハンドアセンブラ(C言語でコンパイルにあたる)して
紙テープに打ち込んでから コンピュータに読み込ませて
🍑ある文字🍑を
紙テープに穴をあけることで表示させていた
それは それは
のどかな時代だった
と
同時に新しいものを作り出そうと
エネルギーに満ちている時代でもあった。
そうして あるとき
紙テープに穴をあけて
ある文字を出力表示するごとに
プログラムをアセンブリで記述して
ハンドアセンブラ
そうして機械語となったプログラムを
紙テープにパンチ穴をあける方法を用いて打ち込み
その紙テープをコンピュータに読み込ませていくのは
ちょっと効率がよくないと認識するようになる。
そこで「ある文字だけ」をキーボードから
入力すれば
プログラムなどをゼロから記述しなくても
TV画面に「ある文字」が出力されるような
システムがうっすらと考えられるようになる。
そうですね。
このままでは
紙テープにハローワールドという文字を表示させるだけでも
ゼロからプログラムを組んでアセンブラ(コンパイラ)後
紙テープに打ち込んでコンピュータに読み込ませて
ようやく ハローワールドが
紙テープに穴をあけて表示されるという状態だった。
1×1を計算実行するのに紙テープにパンチ穴をあけてプログラムを組み計算結果1を紙テープにパンチ穴をあけて表示し
1+1を計算実行するのに紙テープにパンチ穴をあけてプログラムを組み計算結果1を紙テープにパンチ穴をあけて表示し
appleを表示させるだけのために紙テープにパンチ穴をあけてプログラムを組みappleを紙テープにパンチ穴をあけて表示し
ringoを表示させるだけのために紙テープにパンチ穴をあけてプログラムを組みringoを紙テープにパンチ穴をあけて表示し
mikanを表示させるだけのために紙テープにパンチ穴をあけてプログラムを組みringoを紙テープにパンチ穴をあけて表示していたんだお
プログラムの扱い方を知らないふつうの方には
ちょっと扱えない計算機(パソコン)だったというわけなんだね。
今のパソコン画面なら
文字ハローワールドをキーボードから入力すれば
素直に画面にハローワールドが表示されますが・・・
今からすると、そんな本当に、
ものすんごく基本的なことができなかった(´▽`*)・・
いいねえ 開発しがいがあるねぇ。
そのような基本的なことすらできない感じですから
もちろん
scanf関数を用いキーボードから
英数字をうちこむと
自分が打ち込んだ英数字が コマンドプロンプト画面に
printf出力表示される
というようなことはできませんでした
それはともかく
この段階では
コンピュータに
紙テーププログラムを読み込ませてから
紙テープに文字を表示することはできても
キーボードから文字を直接入力して
TV画面に文字を表示することは
できなかった。
そこで
文字を出力表示できる画面と
文字の出力表示を操作する機械語に手が加えられ、
ついに
キーボードから打ち込まれた文字が
そのまま画面に表示できるようになりました。
開発チームによってハードとそれをあやつる機械語に
いい感じに改良を加えたおかげです。
そう
現在のコマンドプロンプト画面のようなもの
コマンドプロンプト画面の前身のようなものが登場してきます。
キーボードから打ち込まれた文字が
そのまま画面に表示できるようになった
以前に比べればだいぶん前進しましたね
ところで
この段階においても
数値計算のプログラムを実行した場合
数値計算のプログラムの実行結果を
画面に表示する機能しかコンピュータにはなかったので
プログラム内の命令文内の数値を、
違う数値に入れ替えて計算したいときは
あらたにプログラムの数値計算の数値部分を違う数値にかきかえてから
コンピュータに実行させていました
どのようなことかというと
1+1を計算するときは
1+1のプログラムを記述してから
プログラムを実行し
その後
1+2を計算するときは
1+1のプログラムの数値1を2にかきかえて
1+2のプログラムを記述してから
プログラムを実行し
その後
5+2を計算するときは
1+2のプログラムの数値1を5にかきかえて
5+2のプログラムを記述してから
プログラムを
コンピュータに実行させていたのです。
それが
機械語と
コンピュータに
さらに改良をくわえることにより
自分でわざわざプログラムの数値をかきかえて
プログラムを実行しなくても
キーボードから
書き換えたい部分の数値を入力するだけで
コンピュータにいろいろな数値計算を実行させることができるようになる便利な機器が発明されたので
大変便利になりました
まだわかりにくいですね😊
では、どのように便利になったのかというと
さらに改良の加えられた
コマンドプロンプト画面の前身に
連動しているコンピュータに
あらかじめ計算プログラムを内蔵させることにより
わざわざプログラムを記述して実行しなくても
5+5を計算したいなら
キーボードに相当するものから
簡単に5、+、5と入力するだけで
5+5を計算できるようになったんです。
プログラムを記述する必要はありません
そのときコマンドプロンプト画面の前身には
5,5,10が表示されるというお洒落なシステムになっています
2×5を計算したいなら
キーボードに相当するものから
簡単に2、×、5と入力するだけで
2×5を計算できるようになったんです。
そのときコマンドプロンプト画面の前身には
2,5,10が表示されるという最新のお洒落なシステムになっています
開発者の方の腕のみせどころだね。
このシステムは
今でもよく使われている
電卓のことなんです。
このように
プログラムを記述せず
プログラムをコンピュータ内に内蔵させて
キーボードからのデータ入力を受け付けるだけで
計算できる電卓は大変便利なものなのです。
お話はかわりますが
その
コンピュータにプログラムを内蔵させておくシステムは
今のコンピュータにも受け継がれています
現在のコマンドプロンプト画面で
あるコマンド(命令)をキーボードから打ち込むと
コンピュータがその命令を実行するよう設計されています
たとえば
ある実行ファイルのある場所
と
その
実行ファイルの名前を
コマンドプロンプト画面に表示されるカーソルから
キーボードで打ち込むと
その
実行ファイルを実行することができます
実行ファイル自体は自分で作製する必要がありますが
実行ファイルを実行させる
そのためのプログラムがコンピュータ内に内蔵されているというわけです
つまり
プログラムを自分で記述したわけでもないのに
ある実行ファイルのある場所
と
その
実行ファイルの名前を
うちこむだけで
実行ファイルが実行できているのですね
超基本的なシステムです
同様に
電卓のコマンドプロンプト画面でも
5+5=
と
コマンド(命令)を打ち込むと
電卓のコンピュータは
5+5の計算を実行し
電卓のコマンドプロンプト画面に
10
を
表示しますね。
コンピュータ内に計算を実行させるためのプログラムが内蔵されているというわけです
このようなシステムが
電卓にもちいられていましたが
ほかに 用いられたのが
ワープロだったんじゃないかな?
今のコンピュータシステムでも
文字を表示するプログラムを記述して実行し文字を表示させることなく
キーボードから文字をうちこむだけで
あらかじめ内蔵されたプログラムが実行され
その文字が
ディスプレイ画面に表示されますね
この仕組みは
ワープロそのものです
ワープロを知らない人もいるかな?
ワープロとは文書を作製するための機械で
ワープロの画面上に表示される文章を
紙に印刷できるという機能をもっています
便利~~~
このように
あらたに登場したコマンドプロンプト画面をもちいた
電卓
ワープロ
では
プログラムを記述することができなくても
誰でも
直接キーボードから数値、文字を入力して
画面に表示できるよう改良がくわえられました。
とりあえず
これでまずは1安心ですね。
実はそのとき
それを可能にするために
コンピュータに内蔵された
コンピュータに命令をあたえる機械語プログラムの記述は
とても複雑でながいものでした。
その機械語プログラムは
アセンブリで記述したプログラムをアセンブル(C言語でのコンパイルに相当します)することにより
得られていました
時代はやや下がり
アセンブリでプログラムを記述するのは
手間がかかるので
機械語を組み合わせて
C言語がつくられる。
機械語を組み合わせてできたC言語は機械語ともいえます。
C言語にかぎらず
Java、Rubyなど他のプログラミング言語も機械語といえます。
コマンドプロンプト画面に直接キーボードから入力した文字を
表示することはできるようになりましたが
それとは別に
昔ながらに
プログラムを記述、実行して
コマンドプロンプト画面に文字を
表示することももちろんできます。
しかし、まだ
C言語には
文字の標準入出力機能がそなわっておらず
(標準入出力機能とはディスプレイに文字を入出力する機能ですが
この意味は 文字を出力表示することのできるprintf関数と
文字を入力することのできる scanf関数がまだつくられていなかった
ということであり
ディスプレイに文字が入出力できなかったということではありません。)
機械語とC言語をくみわせて長いプログラムを組んで
文字を標準入出力させていました。
C言語はまだ完成されておらず
機械語で記述したプログラムと
C言語を使って記述したプログラムをコンパイルして
できた
機械語プログラムをつなぎあわせて
文字を標準入出力させていたというわけです。
C言語も方言だらけの
ワンダーランドな、この時代に
誰かが 長いプログラムを組まなくても
文字を簡単にコマンドプロンプト画面に出力表示することができる
printf関数にあたる
便利で使いやすい文字の出力機能(出力プログラム)を
つくりだしました。
そして、そのprintf関数をいつでも引き出してつかえるように
ヘッダファイル<stdo.h>のようなものに標準出力機能として格納した。
stdoはstandard outの略ですね
同様にして
誰かが 長いプログラムを組まなくても
文字を簡単に
コマンドプロンプト画面から入力させるために
scanf関数にあたる便利で
使いやすい文字の入力機能(入力プログラム)をつくりだし
そして、そのscanf関数をいつでも引き出してつかえるように
新たに
ヘッダファイル<stdi.h>のようなものに標準入力機能として格納した。
stdiはstandard input の略です」
アレサ「そして しばらくの間
文字の標準入出力機能をつかうときには
プログラムの頭の部分に
2つのヘッダファイル
#include <stdo.h>
#include <stdi.h>
を並べて書いてから使用していた・・・けれど・・・
(ヘッダファイル<stdo.h>と<stdi.h>をそれぞれ別々にインクルードしていた)
ソーラー
「scanf関数を使うときは ほぼ確実にprintf関数もつかうので
ふたつのヘッダファイルを1つのヘッダファイル
#include <stdio.h>にまとめた。
こんな創作ファンタジーだったんじゃないかな・・」
アレサ 「創作ファンタジー・・・ですか・・・
でも、とても夢のあるお話です。」
新種の蛇 scanf
「きゅるるるるる」
ソーラー 「どうしたんだい、嬉しいのかい?」
新種の蛇 scanf
「昔、僕を創ってくれた人たちをおもいだしたんだ。」
しっぽをふりふりしながら嬉しそうに話す。
ソーラー 「それは懐かしい時代だったんだね・・・」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます