%s出力変換指定子の書式設定はどのようになってるのかな?


    %s出力変換指定子の書式設定はどのようになってるのかな?



このエピソードでは


プログラムの実行結果を詳しく観察できるよう


%8.3fなどの出力変換指定子の書式設定に[%8.3f]のように


[]がつけられています。


が必ずしも必要なものではありません。


ぶーにゃん 「さらに抹茶販売屋さんのサイトにかいてあるにゃ。」



🍎1

printf("[%8.3f]", 123.45678);

プログラムの実行結果

[ 123.457]


🍎2 

printf("[%12s]", "I am a cat.");

プログラムの実行結果

[ I am a cat.]


🍎3 

printf("[%.6s]", "I am a cat.");

プログラムの実行結果

[I am a]


🍎4 

printf("[%.3e]", 1234.5678);

プログラムの実行結果

[1.235e+03]


てんC 「


🍎1

printf("[%8.3f]", 123.45678);

プログラムの実行結果

[ 123.457]

はさきほど解いた問題ですね。ぶーにゃんさん。」


ぶーにゃん


「🍎1はもうわかるにゃん。^^


🍎2はprintf("[%12s]", "I am a cat.");


を実行してprintf出力表示された結果 [ I am a cat.]


となってるにゃんね。


この[%12s]の


%sは文字列をその部分にとりこむための出力変換指定子だったにゃん。


printf("%s", "I am a cat.");なら


実行結果


I am a cat.


だったにゃん。





てんC


「文字列I am a cat.を%s出力変換指定子


をつかって


コマンドプロンプト画面にprintf出力表示するために


文字列I am a cat.をダブルクォーテーション""で囲って


"I am a cat."のように文字列データと指定していますね。」


ぶーにゃん


「この" "がかわいいにゃん。


%fでも%sでも書式設定のルールは一緒にゃーん。


%12sのsの左側の12は出力される半角英数字の文字数(桁数)をあらわすにゃん。


 [ I am a cat.]をよくみると


ピリオド.もIの左側の半角スペース空欄も


1桁にふくめて[]の中は半角英数字12文字 12桁になっているにゃん。


Iの左側に半角英数字12文字 12桁になるまで


半角空白スペースがたされるにゃんが


この場合は半角空白スペースが1桁足されたにゃんね。」


ぶーにゃん

「[ I am a cat.]のなかの文字数を1つずつ


右から

. t a c 半角スペース a 半角スペース m a 半角スペース I 半角スペース


と机の上に並べて


数えているとなんだか[ I am a cat.]っていうふうに


お寿司がならんでいるような感じがしてきたにゃん。


にゃおーん。きれいにならんでいるにゃん。」


てんC 「そうですね。


きれいにおさまっていますね。


よくみると[ I am a cat.]は私は猫です。


という意味ですね。」


ぶーにゃん 

「私は猫です・・・


そのまんまにゃん。」


てんC

「🍎3 はどうしてこのような


実行結果になったのでしょうか?


🍎3  

printf("[%.6s]", "I am a cat.");

プログラムの実行結果

[I am a]



I am a cat.は

文字列ですが


[%.6s]をみると


まるで小数点以下6桁を表示せよ。のような感じで


.6(コンマ6)のように


書式を指定してあります。


ふふふ。さあ ぶーにゃんさん どうして


[I am a]


が表示されたのでしょうか?


どうなっているのでしょーう。」


ぶーにゃん


「リスナーのみなさん。どうでしょーう。


にゃんか サイトには説明がしてにゃいにゃん。」


てんC 「さあ、みなさん おわかりになられましたか?」


ぶーにゃん


「正解はにゃ~ん。


この [%.6s]の中の


(コンマ6).6は


%f出力変換指定子を用いて 


[%.6f]と記述されたときと違い


小数点以下6桁を表示するのではなく


"I am a cat."のなかの左から6文字(半角スペースも1文字とみなして)


を出力せよ。


という意味なのにゃん。


確かに

プログラムの実行結果は


I am aと


左から6文字表示されているにゃんし


この説明でいいかにゃ~とおもったのにゃん


サイトに説明のってないから


もう


そうきめちゃったにゃーん。😺」


てんC「その意気です。


リスナーのみなさんも喜んでおられますよ。」


では


printf("[%12.6s]", "I am a cat.");


が実行されたなら


どのような結果が表示されるのでしょううか?」


ぶーにゃん「にゃにゃ」



#include <stdio.h>


int main(void)

{

printf("[%12.6s]", "I am a cat.");


return 0;

}



プログラムの実行結果


[ I am a]

C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 112076) は、コード 0 で終了しました。

このウィンドウを閉じるには、任意のキーを押してください...



てんC「この場合は


まず


この [%12.6s]の中の


(コンマ6).6は


"I am a cat."のなかの左から6文字(半角スペースも1文字とみなして)


を出力せよ。


という意味なのにゃん。


[ I am a]


をみると


I am a cat.


左から6文字の


I am a



表示されているにゃん



この [%12.6s]の中の12は


半角英数字12文字を表示するという設定になっていますにゃん


だけど・・・


I am a


では


6文字までしか表示されていないので


Iの左側に半角スペース6文字が付け加えられた


[ I am a]

(空白部分は半角スペース6文字)

が表示されることになるニャンね   」





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る