ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
printfは、C言語由来の書式付き標準出力関数で、書式文字列の中に「変換指定子」を埋め込み、後続の引数を整形して標準出力(画面)へ書き出します。整数・浮動小数点数・文字列など型ごとに指定子を使い分け、幅・精度といった整形も一括で指定できるのが特徴です。C++では<cstdio>をインクルードすることで利用でき、C時代から続く定番の出力手段ですが、現在のC++では型安全なstd::coutやstd::format(C++20)の利用が推奨される場面が多くあります。
| この記事の要点 |
|---|
|
printfとは
printfは、C言語の標準ライブラリに含まれる書式付き出力関数で、C++からも<cstdio>ヘッダ(C言語の<stdio.h>に相当)を通じて利用できます。「print formatted(書式付きで出力する)」が名前の由来で、第1引数の書式文字列に出力したいテキストと変換指定子を記述し、第2引数以降に整形対象の値を並べて渡します。
printfは指定子の数だけ任意個の引数を受け取れる「可変引数関数」であり、書式文字列に書かれた指定子の順番どおりに後続の引数が割り当てられます。出力先は標準出力(通常はコンソール画面)で、改行は自動的には付与されません。
|
#include <cstdio> int main() { int age = 25; printf("年齢は%d歳です\n", age); return 0; } |
上の例では、書式文字列中の%dが引数ageの値(25)に置き換えられ、「年齢は25歳です」と改行付きで出力されます。
書式指定子(変換指定子)一覧
書式文字列の中で%から始まる記号を変換指定子と呼び、対応する引数をどの型として解釈し、どう整形するかを指定します。代表的な指定子を以下にまとめます。
| 指定子 | 対象の型 | 意味 | 出力例 |
|---|---|---|---|
%d |
int | 10進整数 | 42 |
%f |
double | 浮動小数点数 | 3.141593 |
%s |
char*(C文字列) | 文字列 | Hello |
%c |
int(文字) | 1文字 | A |
%x |
unsigned int | 16進数(小文字) | 2a |
%p |
void* | ポインタ(アドレス) | 0x7ffd... |
%% |
― | %記号そのものを出力 | % |
%fに対してはdouble型を渡します(floatを渡しても可変引数の規則でdoubleに昇格されます)。%%は引数を消費せず、書式文字列の中にパーセント記号そのものを出力したいときに使います。
|
#include <cstdio> int main() { printf("%d %f %s %c %x %%\n", 42, 3.14, "abc", 'A', 255); return 0; } |
出力結果は「42 3.140000 abc A ff %」となります。
幅・精度・桁揃えの指定
変換指定子は%と型文字の間にフラグ・幅・精度を挟むことで、出力の体裁を細かく調整できます。書式は%[フラグ][幅][.精度]型の順に並べます。
| 指定 | 意味 | 例(入力) | 出力(_は空白) |
|---|---|---|---|
%5d |
最小幅5。足りない分は左側を空白で埋める(右寄せ) | 42 | ___42 |
%-5d |
最小幅5で左寄せ | 42 | 42___ |
%05d |
最小幅5。足りない分を0で埋める | 42 | 00042 |
%.2f |
小数点以下の桁数を2桁に丸める | 3.14159 | 3.14 |
%8.2f |
全体幅8・小数2桁 | 3.14159 | ____3.14 |
%-10s |
幅10で文字列を左寄せ | abc | abc_______ |
幅は「最小幅」であり、値がその幅より長い場合は切り詰められずそのまま出力されます。精度(.以降)は浮動小数点では小数桁数を、文字列では出力する最大文字数を意味します。表組みのように桁を揃えて出力したいときに便利です。
改行の扱い
printfは出力後に改行を自動では付けません。改行したい場合は書式文字列の中に改行を表すエスケープシーケンス\nを明示的に含めます。複数回printfを呼ぶ場合、\nを入れ忘れると出力が一行につながってしまうため注意が必要です。
|
printf("1行目\n"); printf("2行目\n"); |
C++では std::cout や std::format が推奨される
printfはC由来の関数で今もC++で利用できますが、現代的なC++では出力にstd::cout(<iostream>)や、C++20で追加されたstd::format(<format>)を使うことが推奨される場面が多くあります。これらは引数の型をコンパイラが認識するため、printfで起こりがちな「指定子と引数の型の食い違い」が原理的に発生しにくいという利点があります。
|
#include <iostream> #include <string> int main() { int age = 25; std::string name = "Taro"; std::cout << name << " is " << age << std::endl; return 0; } |
std::coutでは<<演算子で値を連結し、型ごとの指定子を書く必要がありません。std::stringもそのまま渡せます。C++20以降であれば、printfに近い書式文字列の感覚を保ちつつ型安全なstd::formatも選べます。
|
#include <format> #include <iostream> int main() { std::cout << std::format("{} is {}\n", "Taro", 25); return 0; } |
printf と std::cout の比較
| 観点 | printf | std::cout |
|---|---|---|
| 必要なヘッダ | <cstdio> |
<iostream> |
| 出自 | C言語由来 | C++の標準ライブラリ |
| 型の扱い | 指定子で明示。型不一致は未定義動作 | 型をコンパイラが認識(型安全) |
| 記述スタイル | 書式文字列+可変引数 | <<演算子で連結 |
| std::string | 直接渡せない(.c_str()が必要) |
そのまま渡せる |
| 書式整形 | 幅・精度を簡潔に書ける | マニピュレータ等で指定(やや冗長) |
printfは書式文字列だけで桁揃えを簡潔に書ける一方、std::coutは型安全でstd::stringもそのまま扱えます。用途や保守性に応じて使い分けるとよいでしょう。
落とし穴と注意点
| 注意点 | 内容 |
|---|---|
| 指定子と引数の型の不一致 | %dにdoubleを渡すなど、変換指定子と引数の型が一致しない場合の動作は未定義動作です。コンパイルが通っても誤った値の出力やクラッシュにつながることがあるため、指定子と引数の型は必ず対応させます。 |
| std::string を %s に直接渡せない | %sはC文字列(char*)を期待するため、C++のstd::stringをそのまま渡すと未定義動作になります。printfで使うならstr.c_str()でC文字列を取り出して渡します。 |
| 引数の個数や順序の誤り | 指定子の数より引数が少ない場合の動作も未定義です。書式文字列を書き換えた際は、指定子と引数の対応が崩れていないか確認します。 |
| 改行の付け忘れ | printfは改行を自動付与しないため、行を分けたい場合は\nを明示します。入れ忘れると出力が一行に連結されます。 |
よくある質問(FAQ)
Q. C++でprintfを使ってもよいですか。
A. 使えます。<cstdio>をインクルードすれば問題なく動作します。ただし型安全性やstd::stringの扱いやすさの点から、新規のC++コードではstd::coutやstd::format(C++20)が選ばれることも多くなっています。用途に応じて選択してください。
Q. 整数を0埋めして桁を揃えるには。
A. 幅指定の前に0を付けます。たとえば%05dとすると、5桁に満たない部分が0で埋められ、42は「00042」と出力されます。
Q. %記号そのものを出力したいときは。
A. %%と2つ重ねて書きます。これは引数を消費せず、出力にはパーセント記号が1つ表示されます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- printf 標準入出力関数
- printfで数値を表示する方法
- coutによるコンソール出力
- cinによる入力(パラメータ渡し)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?