こんにちは､ そしてお帰りなさい｡
この講義では､ フォーマット指定子についてお話したいと思います｡
だから､ これは変数とデータ型のセクションにある｡
そして､ その理由は､ 変数の値を出力として表示できることが非常に重要だからです｡
そして､ フォーマット指定子は､ 基本的にその手助けをするものです｡
そこで､ 変数の値を表示する方法を示すいくつかの例を実行したいと思います｡
表示したいデータの種類を指定するために､ 書式指定子を使用します｡
そのため､ 変数を出力として表示する際には､ 書式指定子を使用する｡
データの変換にも使えますが､ とりあえずこの出力の使い方を説明します｡
表示したい変数のデータの種類を指定するものである｡
例えば､ sumという整数を宣言して､ それが89に等しい場合､
その変数sumを表示するには､ printf関数を使用します｡
しかも､ 右がちょっと変な感じ｡
このprintfで注目すべきは､ パーセント記号があることです｡
そして､ フォーマット指定子を識別する方法として､ このパーセント記号があります｡
つまり､ フォーマット指定子はその名の通り､ データのフォーマットを指定するもので､
基本的に何かをどのようにフォーマットしたり表示したりすべきかを指定するものです｡
つまり､ この例では､ printfは出力を表示するために使っていた関数です｡
いろいろな事例や課題があったからこそ､ どうすればいいのかがわかる｡
Printfは関数です｡
関数については詳しく説明していませんが､
一般的な概念として､ 関数はコードの集まりであることを意味します｡
関数の中にアルゴリズムがあるような整理の仕方です｡
関数には括弧がつくなど､ C言語特有の構文があります｡
つまり､ 主関数はプログラムへの入力方法であることがわかるのです｡
だから､ 私たちは少なくともmainと呼ばれる関数に慣れ親しんでいるのです｡
また､ printfはコンソールに出力を表示するための関数の1つなので､
printfについて学んできました｡
ですから､ この2つの基本的な機能を理解することが重要なのです｡
ここまでの機能のすべてを理解する必要はないのです｡
私たちは､ 関数が呼び出されたり､ 呼び出されたりして､ 何かをすることができることを知るだけでよいのです｡
この場合､ 出力を表示するためにprintf関数を使っていますが､ この括弧の中にある内容に基づいて､
何を表示するかを指示しています｡
つまり､ printfは関数であり､ 変数の出力を表示することができるのです｡
これまでは､ printfを使って何かを表示しようとすると､ 二重引用符で囲むだけで､
画面にテキストが出力されるのが確認できました｡
しかし､ 変数をプリントアウトしたいときはどうするのだろう｡
さて､ 変数をプリントアウトする場合､ プリントアウトしたいその変数のデータの型を指定する必要があります｡
printf関数はその情報を必要とします｡
関数についてまだ何も知らない人がprintfを解析する場合､
左括弧と右括弧があることに注目するとよいでしょう｡
そこにコンマがある｡
そこに引用がある｡
まず､ 括弧があるので､ その機能がわかると思います｡
そして､ その括弧の中にあるのが､ いわゆる関数引数です｡
これは関数に渡すデータで､ 使用することができます｡ このすべてを理解することは重要ではありませんが､ これは引数であり､
引数はカンマで区切られています｡
つまり､ printf関数の最初の引数は､ この二重引用符の中にあるものすべてです｡
第2引数は､ その変数sumになります｡
そして､ 最初の引数は､ 出力として表示させたいもの､
つまり二重引用符で囲まれたものを表します｡
そしてここまでは､ テキストを表示することができました｡
しかし､ このパーセントdの記号とバックスラッシュnは､ バックスラッシュnがエスケープシーケンスであることは分かっている｡
だから､ それをプリントアウトしようとすると､ 改行されたものがプリントアウトされるだけなのだ｡
しかし､ パーセントdはどうなっているのだろう｡
さて､ パーセントdは､ 基本的にパーセント記号を見たときに､ 実際にはパーセントをプリントアウトするなということです｡
次の引数が何であるかをプリントアウトする｡
つまり､ パーセントdは実際に補間されるか､ 変数sumにマップされることになります｡
そのため､ sum isという文字列の表示とともに､ sum is percent
dを表示した直後に､ 同様に表示したい変数にマッピングされることになります｡
そして､ バックスラッシュnは改行として解釈されることになる｡
つまり､ これはsumがsumの値であることを表示し､ その後､ 改行することになります｡
さて､ パーセント記号は､ フォーマット指定子であることを告げています｡
dは整数であることを伝えているのです｡
そして､ そのデータの種類によって､ パーセント記号の後が変わってきます｡
つまり､ printf関数がそうなっているわけです｡
フォーマット指定で重要なのは､ パーセント文字です｡
printf関数で認識される特殊文字です｡
そして､ そのパーセント記号のすぐ後にあるのは､
印刷したいデータの種類を示すものです｡
印刷したいデータの型は､ このように一文字でdとするだけです｡
実際に印刷するデータはカンマの後にあります｡
そして､ そこにさまざまなパーセント記号を入れて､ さまざまな種類のデータを印刷することができますので､
いくつかの例を見てみましょう｡
ここでは､ 異なるタイプの変数をいくつか作成する例を示します｡
整数型変数､ フロート型変数､ ダブル型変数､ キャラクタ型変数を作成しています｡
そして､ さまざまなデータの値を割り当てているのです｡
そして､ これらの実際の変数の値を表示したい｡
これらのprintfの例では､ パーセント記号の後に異なる文字があるのがわかると思います｡
パーセントI､ パーセントf､ パーセントe､ パーセントg､ パーセントcがあります｡
ここでも､ これらの文字がデータの種類を表している｡
パーセントのiは整数を表すことになる｡
パーセントdも整数を表す｡
パーセントのfはフローを表します｡
パーセントeは､ 実際にはダブルを表すことになる｡
パーセントgは､ フォーマットが違うだけで､ 同様にダブルを表すことになる｡
パーセントのcは文字変数を表すことになる｡
そして､ ブール値｡ ブール値とは､ 真か偽の0､ 1のことだと書きましたね｡
だから､ そこでもパーセントiを使うことができる｡
では､ この例をコードブロックで見てみましょう｡
では､ おなじみの例､ メイン関数､ メインプログラムを紹介しましょう｡
そして､ 異なるデータ型を持つ小さなプログラムのために持っていた値をコピーして貼り付けるだけです｡
ということで､ スライドにあった例です｡
ここでも､ かなり大きなフォントで書いていますので､ 皆さんに見ていただけると思います｡
この例でやっていることは､ 異なるデータ型の変数をいくつか宣言しているだけです｡
そこで12行目では､ integer variable, integer varというint型の変数を宣言して､
それに100を代入しています｡
つまり､ 変数の初期化と宣言を行っているわけです｡
13行目にint､ 14行目にflow､ 15行目にdouble､ 15行目にcharacterとあります｡
シングルクォートの中にあるので､ 文字であることがわかります｡
そして､ ブール値ですが､ これもアンダースコアのboolで､
C99規格で定義されているものですが､ boolを使うだけです｡
そのほうがいいと思うんです｡
そして､ それを0に設定すればいいのです｡
出力を表示しているprintf関数です｡
そして､ 二重引用符の中の最初の引数は､ 画面に表示されるものになります｡
第2引数には､ フォーマット指定子であるパーセントiがマッピングされることになる｡
そして､ バックスラッシュnはエスケープシーケンスなので､ ただ新しい行を印字しているだけです｡
このコードを実行するとしたら､ まずコンパイルして､ どこかに余分な文字があるように見えるとします｡
コードブロックの場合､ エラーを識別する方法のひとつに､ この色分けがあります｡
教えてくれるはずです｡
だから､ もしハイライトされているものがあれば､
それは何か変なことが起こっている証拠です｡
では､ 保存してビルドしてみると､ 無名のbool型がありますね｡
そこで､ とりあえずアンダースコアのプールを使うことにします｡ ここでまだいくつかの悪い文字がありますが､
これはprintfが実際には...
パワーポイントのスライドからマイクロをコピーして貼り付けたら､
変な文字が追加されたんだ｡
だから今は､ それがないことを確認しなければならないのです｡
これでエラーは出なくなりました｡ なぜboolを使えなかったかというと､
c++だからです｡
だからboolは､ 実はc11規格までは別名として定義されていないcのためのものだと思う｡
まあ､ アンダースコアのboolを使わないといけないんですけどね｡
では､ これを実行してみましょう｡
そして､ 出力は､ 出力を表示することになります｡
ですから､ 整数値を表示していることに再び気が付くでしょう｡
つまり､ 引用符で囲まれた部分を表示し､ パーセントIは整数値であるvarの値､
つまり100にマッピングされるのです｡
つまり､ パーセントfは浮動小数点にマッピングされ､ その逆もまた然りです｡
つまり､ 整数のvarは100に等しく､ 浮動小数点のvarは331に等しいと出力されます｡
79など､ ダブルバーとダブルバー｡
また､ 提供するスペックによって､ フォーマットが少し異なることにお気づきでしょう｡
また､ bool var が 0 になっているのは､ bool が実際には整数であるためです｡
その他に注目すべきは､ 行の中で浮動小数点が実際に331として出力されていることです｡
79009.
しかし､ 私たちは331を割り当てました｡ 79で､ より精密に表示されるのは､ スペシファイアfのためで､
マシンに依存しないため､ マシンによって表示が異なる場合があります｡
これは､ フォーマット指定子の使い方の一例です｡
また､ 同じ行に複数の変数を表示させたい場合は､
実際にここに必要な他のものを入れることができます｡
そして､ もうひとつ､ パーセントdか､ パーセントlet'sで浮動小数点数のプリントアウトをすることができます｡
パーセントfをやって､ あとは2つの変数をプリントアウトすればいいわけです｡
コンマがもう一つあったので､ floating varと言います｡
つまり､ 2つの変数を1つのステートメント､ 1つのprintステートメントでプリントアウトしようとしたのです｡
そこで､ もう一つ書式指定子を追加し､ さらにカンマを追加して､
表示したい変数を指定するだけにしました｡
だから､ 二重引用符の間にいくらでも書式指定子を入れることができるのです｡
そして､ 各変数のカンマの後にあるものにマッピングされることになります｡
今回もフォーマット指定子についてお話したいと思ったのは､ デバッグのためにデータをプリントアウトするためです｡
変数をプリントアウトする方法を知っておくことは重要です｡
そして､ c言語には様々な種類のフォーマット指定子があります｡
データ型によって､ 基本的に使うことになるものを少し図解で紹介したいと思います｡
しかし､ フォーマット指定子はこれ以上複雑になることはない｡
ここにパーセントを入れて､ 2ドットと言えば､ 小数点以下2桁まで表示されます｡
フォーマット指定子を使ってデータをフォーマットすることで､
いろいろないいことができるんだ｡
しかし､ ここでは基本的なことだけを説明します｡ 基本的には､
フォーマット指定子を使って出力されるデータの種類を指定し､
その変数をカンマで囲むという方法です｡
だから､ これで遊べるんです｡
今回も､ これを理解するためのアクティビティやちょっとしたチャレンジを用意しています｡
しかし､ このプログラムは､ 変数の初期化を宣言し､
それを書式指定子を使って表示することを示しただけです｡
それでは､ スライドに戻り､ cで利用できるさまざまなフォーマット指定子をいくつかまとめてみましょう｡
もう一つ､ 書式指定子に関する例として､ with指定子について見てみましょう｡
つまり､ 幅指定子は､ パーセント記号の後に数字を入れて､ スペースに残る文字の大きさより小さい場合に印刷される最小のフィールド幅を指定するところです｡
ということで､ 精度の高さが問われます｡
ですから､ これは実際の例をお見せすれば､ より理解しやすいと思います｡
これは本当に浮動小数点数と整数に関係するんですね｡
そこで､ xというフローがあり､
これは3に等しくなるとします｡ 99983または異なる小数点の束｡
これの幅を､ どこまでか､ どこまで正確な数字かを指定して印刷することができる｡
そこでできることは､ printfと言うことです｡
また､ パーセントxを表示する場合､ 通常はパーセントfのようなものを使い､
フロートを表示するようにします｡
しかし､ 私たちが代わりに行いたいのは､ 指定することです｡
だから､ このような形になるのです｡
パーセントfとは対照的に､ 実際にはパーセントドットと言って､ ドット2のような言い方ができます｡
そして､ これが何をするかというと､ 3つだけプリントアウトするのです｡ 99は､ ドット､ そして数値が浮動小数点数の幅を指定するためです｡
では､ これをビルドして､ 実行するときに､ これがxであることを確認したい､
2精度までしかプリントアウトされないことを確認したい､ と言うことができます｡
これを実行すると､ 4がプリントアウトされるのがわかります｡ 00なので四捨五入しています｡
しかし､ やはりパーセント2が仕様です｡
今､ あなたはこれを変えることができます｡
もし2を使いたくなければ､ 5と言えば全部印刷され､
丸められます｡
では､ 実際に9をやってみましょう｡ 3で､ 5つの精度をプリントアウトしてくれます｡
さて､ これを実行すると､ 3がプリントアウトされるのがわかると思います｡ 93232.
だから､ 小数点以下が5つあるんです｡
それで､ どのように提供するかは､ width演算子を使えばいいわけです｡
このスライドでは､ 3列目のprint f chartsでprintfに使用するフォーマット指定子を説明しています｡
ですから､ 文字を出力したい場合は､ パーセントcを使います｡
ブール値を出力したい場合は､ パーセントiまたはパーセントuを使用すると､ 0または1を出力します｡
constには､ これらのデータ型を表すものの例も載っている｡
短いintは､ パーセントhi､ パーセントhxなどです｡
よく使うのはintでパーセントiとかパーセントdとか､
パーセントdは規格によってintを使うのが普通です｡
パーセントfは､ 浮動小数点数､ 倍数､ パーセントf､ パーセントe､ パーセントgに関連するuが表示されます｡
それぞれが精度を決めていくのです｡
ロングダブルのパーセントlfや､ 文字列のパーセントsもよく使われますが､
文字列についてはまだ話していませんね｡
しかし､ 繰り返しになりますが､ これらすべての異なるフォーマット指定子を含めることで､
データを変換するだけでなく､ データを出力として表示することができます｡ そして､
多くの例でこれを行います｡
ありがとうございます｡