☆コンピュータのメモリに格納された文字列データをコマンドプロンプト画面に出力表示するには%s出力変換指定子を使用します

ただいまー


solarplexussです。 


今日も みなさん、 C言語で遊ぼう!😝。


じゃあ


まずは aをシングルクォーテーション(')で囲んで


文字データ'a'として


コンピュータのメモリに格納


そして


文字データ'a'を


%c出力変換指定子をつかって


同じくコンピュータのメモリに格納される


文字列データ"%c\n"の%cの部分に


とりこんで


a



コマンドプロンプト画面にprintf出力表示してみようかな・・・



るんるん♬

\(^o^)/solarplexussです。(^^)

 


#include <stdio.h>

int main(void)

{

printf("%c\n", 'a' );

return 0;

}


みなさん このプログラムを


キーボードでうちこんで実行すると



Visual Studio2018の場合


a

続行するには何かキーを押してください


Visual Studio2019の場合


a


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

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




と表示されます。


ちゃんと


aの行

続行するには何かキーを押してください

の行


改行されてますね。



では次のプログラムはどうでしょう。


#include <stdio.h>

int main(void)

{

printf("%c\n", 'abc' );

return 0;

}




'abc'とうちこんでコンパイルしてみましょーう。」


ソーラー 「 solarplexussさん、何して るんるん で・す・か?」


solarplexuss 「い、いや 、天国にいけるC言語入門 シーズン1


パソコン超初心者がゼロから


東方風シューティングをつくる編 59話目を実況してるなう。」


ぶーにゃん 「うちらも登場にゃ~ん。」


マックス 「そうだ。みんなでレッツゴーだ。


きょうはどこの


ダンジョンを探索するんだ?」


てんC 「ファイトォ🔥」


ソーラー

「ああ。この続きですね。%c出力変換指定子


ですか


'abc'とうちこんでコンパイルしてみましょーう。 ですね。


私たちを "ぬけがけ" してずいぶん楽しそうですね。


ニコニコ😊ですね。


読者に実況ですか・・・・・」


solarplexuss 「はーい。」


ぶーにゃん 「では うちがコンパイルっと。」


#include <stdio.h>

int main(void)

{

printf("%c\n", 'abc' );

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


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

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

警告

multi-character character constant



ビルド実行結果


(Visual Studio)の場合


ビルド正常終了しますが


プログラムの実行結果は


c


と表示され


思ったようにabcを


コマンドプロンプト画面に表示できません」


ぶーにゃん 「やっぱりコンパイルエラーがでるにゃん。


シングルクォーテーション' '内には一文字しか書き込めないにゃん。


ところで、


この%cのcって英語のcharacter(文字という意味)


だとおもうにゃん。」


ソーラー「あっ はは そういえばそうだね!」


マックス


「よーし、ではabcのように並んだ文字列を


コンピュータのメモリに格納して


printf出力表示するには・・


・・・


わっかるーCをみてみると・・・」


以下 わっかるーC



printf関数を使って


abcという文字列を文字列データとして


コンピュータのメモリに格納するには


ダブルクォーテーション" "でabcを囲んで


"abc"と表記します。


そしてコンピュータのメモリに格納された文字列データ"abc"を


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


%s出力変換指定子をもちいます


そのプログラムは次のようになります


#include <stdio.h>

int main(void)

{

printf("%s\n", "abc");


return 0;

}


コンパイル結果(EAZY IDECの場合)

ビルド結果(Visual Studio)の場合


abc



マックス「


printf("%s\n", "abc");


おおっ


printf("%c\n", 'a' );とくらべてみると


1文字aが' '(シングルクォーテーション)で囲まれていたものが


文字列abcでは" " (ダブルクォーテーション)


で 囲まれているなあ。」


ソーラー 「プログラムを実行すると


abc


コマンドプロンプト画面に表示されました。 



printf("%s\n", "abc");


が実行されると


コンピュータのメモリに文字列データ


"abc"



同じく


コンピュータのメモリに文字列データ


"%s\n"


が格納されることになります


この


文字列データ


"abc"



文字列データ


"%s\n"


のデータが


組み合わされてもちいられて


abcがコマンドプロンプト画面に


表示されることになります


あたかも


printf("%s\n", "abc");




%sの部分に"abc"がとりこまれる形


つまり


"abc\n"が記述されている


printf("abc\n");


が記述されているのに等しくなるというわけです・・・」


マックス 「しーーーーーん。」


ぶーにゃん 「しーーーーーん。」


てんC 「はいC(^_^)/☆☆ー」


ソーラー「おいC(^_^)/☆☆ー」


てんC 「ちょっといってみたかったのです。」


マックス 「あのー これ


printf("abc\n");

printf("%s\n", "abc");


でなにかプログラムの実行結果に違いがあるんでしょうか・・・?


プログラムの実行結果に


abcと表示したいだけなら%sを使って


printf("%s\n", "abc");

と記述しなくても


printf("abc\n");


だけでいいのでは・・・


%s出力変換指定子はなんのためにあるんだ・・・?」


ぶーにゃん 「その違いとは・・・」


マックス 「はい、次」


切り替えの早いマックスでした。



😊😊😊


%s出力変換指定子は後のエピソードで大活躍しちゃうぞ


               solarplexussより



ソーラー「いやあ、まあ、こんなこともできるんだよ~」


#include <stdio.h>

int main(void)

{

printf("%sはアルファベットです\n", "abc");


return 0;

}


プログラムの実行結果


abcはアルファベットです


マックス「文字列データ"abc"が


文字列データ

"%sはアルファベットです"


の中の%sにとりこまれている!」


ソーラー「そうなんです おもしろいよね。


だからこんなこともできます。


#include <stdio.h>

int main(void)

{

printf("abc%sghiはアルファベットです\n", "def");


return 0;

}


コンパイル結果(EAZY IDECの場合)

ビルド結果(Visual Studio)の場合


abcdefghiはアルファベットです


マックス「おおぅ 文字列が1体化した


どこがつなぎ目か全く分からない


これゲームでつかえそうだな・・・」


ソーラー「ええ😊


そうですね


ところで

そういえば


       勇者 マックス よ


マックスはレベルが10になった


マックスはやくそうをつかった


王様「おおう マックスょぉ~ 元気にしとるかい」


こんな文章をRPGゲームでみかけますね。


😊」


マックス「これらの文章は


みればわかるように


RPGゲームで最初に自分で主人公の名前を


マックスと決定して名前設定欄にうちこんだら


後に出てくる文章の中に出てくる主人公の名前の部分が


全部 マックス ってなるやつだな


もしかしたら


これらの文章は


%s出力変換指定子が


文章の中にかきこまれていて


あとから


ユーザーが決めて


キーボードから名前設定欄に打ち込んだ名前



なにがしかの方法で



printf関数の第2引数に渡され


              その後


%s出力変換指定子の部分にとりこまれてるんじゃないか?


まあこんな感じじゃないか?



printf("勇者 %s よ\n",マックス);


printf("%sははレベルが10になった。\n",マックス);


printf("%sはやくそうをつかった。\n",マックス);

  

 printf("%sはとってもかっこいいです\n",マックス);


どのようにマックスが


printf関数の第2引数に渡されるのかは不明だが・・・




最初から


次のプログラムのように


文章のなかの主人公の名前の部分に


マックスと記述してあったら


#include <stdio.h>

int main(void)

{

printf("マックスはとってもかっこいいです\n");

printf("マックスは10G手に入れた。\n");

printf("マックスは王城に向かった。\n");

printf("マックスはLEVEL UPした。\n");

return 0;

}


ゲーム内では


マックスはとってもかっこいいです

マックスは10G手に入れた。

マックスは王城に向かった。

マックスはLEVEL UPした。


が表示されて


主人公の名前はマックスのままで


主人公の名前を


ソーラー

ぶ~にゃんに変えられない


つまり


主人公の名前がマックスと最初からきまっていて


主人公の名前を自分で決められないタイプのゲームとなるわけだ。」


ソーラー「あっ ほんとうだ!」


マックス「ああっ ほんとうだ!!


!!

自分でいっておいて


俺はぁ いまごろ気付いたんか~い ゼロポイン~~トぉ」


ぶーにゃん「にゃ~」


てんC 「プログラミング言語の


いろいろな機能を


つかって


ゲームはつくられていそうですね」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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