C#: 入力と出力
1. Console.Write と Console.WriteLine
Console.Write は末尾に改行を付けずにテキストを出力しますが、Console.WriteLine は自動的に改行を付加します。
▶ サンプル
CSHARP
Console.Write("Hello");
Console.Write(" ");
Console.WriteLine("World");
Console.WriteLine("Second line");
TEXT
📖 参照専用
Hello World
Second line
2. プレースホルダーの書式設定
文字列に変数の値を挿入するには、{0}、{1} などをプレースホルダーとして使用し、フォーマット文字列の後に、対応する引数を順番に列挙します。
▶ サンプル
CSHARP
string name = "Alice";
int age = 25;
Console.WriteLine("Name: {0}, Age: {1}", name, age);
Console.WriteLine("{0} is {1} years old, {0} is a programmer", name, age);
TEXT
📖 参照専用
Name: Alice, Age: 25
Alice is 25 years old, Alice is a programmer
3. 文字列補間
文字列の先頭に $ を付け、{} の内部に変数や式を直接記述します。これは、プレースホルダー形式よりも読みやすくなります。
▶ サンプル
CSHARP
string name = "Bob";
int age = 30;
Console.WriteLine($"Name: {name}, Age: {age}");
int x = 10, y = 20;
Console.WriteLine($"Result: {x + y}");
TEXT
📖 参照専用
Name: Bob, Age: 30
Result: 30
4. アライメント制御
プレースホルダーや補間では、コンマで幅を指定します。正の値は右揃え、負の値は左揃えになります。たとえば、{0,10} は幅 10 で右揃えになり、{0,-10} は幅 10 で左揃えになります。
▶ サンプル
CSHARP
Console.WriteLine("|{0,10}|", "Right");
Console.WriteLine("|{0,-10}|", "Left");
Console.WriteLine($"|{"InterpR",10}|");
Console.WriteLine($"|{"InterpL",-10}|");
TEXT
📖 参照専用
| Right|
|Left |
| InterpR|
|InterpL |
5. 精密制御
数値の精度を制御するには、書式指定子を使用します。F2 は小数点以下 2 桁、F4 は小数点以下 4 桁を保持するなど、それぞれ指定します。
▶ サンプル
CSHARP
double pi = 3.14159265;
Console.WriteLine("{0:F2}", pi);
Console.WriteLine("{0:F4}", pi);
Console.WriteLine($"{pi:F3}");
TEXT
📖 参照専用
3.14
3.1416
3.142
6. 一般的な書式指定子
| 指定子 | 名称 | 説明 |
|---|---|---|
C |
通貨 | 通貨記号を追加 |
D |
10進数 | 整数を0で埋める |
F |
固定小数点 | 小数点以下の桁数 |
P |
パーセント | 100倍し、%を加算 |
X |
16進数 | 16進数に変換 |
▶ サンプル
CSHARP
int num = 255;
double money = 1234.56;
double ratio = 0.856;
Console.WriteLine($"Currency: {money:C}");
Console.WriteLine($"Decimal: {num:D6}");
Console.WriteLine($"Fixed-point: {money:F1}");
Console.WriteLine($"Percent: {ratio:P1}");
Console.WriteLine($"Hexadecimal: {num:X}");
TEXT
📖 参照専用
Currency: ¤1,234.56
Decimal: 000255
Fixed-point: 1234.6
Percent: 85.6%
Hexadecimal: FF
7. 入力用の Console.ReadLine
Console.ReadLine() はコンソールから 1 行のテキストを読み取り、それを string として返します。入力ストリームの末尾に達すると、null を返します。
▶ サンプル
CSHARP
Console.WriteLine("Please enter your name:");
string input = Console.ReadLine();
Console.WriteLine($"Hello, {input}!");
TEXT
📖 参照専用
Please enter your name:
Charlie
Hello, Charlie!
8. 数値入力の変換
Console.ReadLine() は文字列を返すため、int.Parse、int.TryParse、または Convert.ToInt32 を使用して、それを数値に変換してください。
▶ サンプル
CSHARP
string str1 = "42";
int num1 = int.Parse(str1);
int num2 = Convert.ToInt32(str1);
string str2 = "abc";
if (int.TryParse(str2, out int result))
{
Console.WriteLine($"Conversion succeeded: {result}");
}
else
{
Console.WriteLine("Conversion failed, input is not a valid integer");
}
Console.WriteLine($"Parse result: {num1}");
Console.WriteLine($"Convert result: {num2}");
TEXT
📖 参照専用
Conversion failed, input is not a valid integer
Parse result: 42
Convert result: 42
9. 単一キー入力のための Console.ReadKey
Console.ReadKey() は、Enter キーを押す必要なく、1回のキー入力を読み取ります。この関数は ConsoleKeyInfo オブジェクトを返し、その文字には KeyChar を通じてアクセスできます。
▶ サンプル
CSHARP
Console.WriteLine("Press any key to continue...");
ConsoleKeyInfo key = Console.ReadKey();
Console.WriteLine();
Console.WriteLine($"You pressed: {key.KeyChar}");
TEXT
📖 参照専用
Press any key to continue...
A
You pressed: A
10. 補間における式と書式設定
補間 {} の中に式を記述したり、書式指定子と配置を組み合わせたりすることができます。構文は {expression,alignment:formatSpecifier} です。
▶ サンプル
CSHARP
double price = 29.9;
int quantity = 3;
Console.WriteLine($"Unit price: {price:C}, Quantity: {quantity}, Total: {price * quantity:C}");
Console.WriteLine($"|{price,10:C}|");
int hex = 255;
Console.WriteLine($"Hexadecimal: {hex:X4}");
TEXT
📖 参照専用
Unit price: ¤29.90, Quantity: 3, Total: ¤89.70
| ¤29.90|
Hexadecimal: 00FF
11. 書式設定のベストプラクティス
- コードをより明確で読みやすくするため、文字列補間
$""を優先する - 例外が発生しないように、ユーザー入力には常に
TryParseを使用し、Parseは使用しないでください - 表形式のデータを出力する際は、列幅を統一する
- 通貨金額には
C形式指定子を使用し、パーセンテージにはPを使用してください - 複雑な書式設定をメソッドに抽出することで、コードの重複を減らす
ReadKeyでプログラムを一時停止し、ReadLineで入力の行全体を読み込みます
▶ サンプル
CSHARP
string[] names = { "Apple", "Banana", "Orange" };
double[] prices = { 5.5, 3.2, 4.8 };
int[] stocks = { 120, 85, 200 };
Console.WriteLine($"{"Item",8}{"Price",8:C}{"Stock",8}");
Console.WriteLine(new string('-', 24));
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine($"{names[i],8}{prices[i],8:F2}{stocks[i],8}");
}
Console.WriteLine("\nEnter quantity to purchase:");
if (int.TryParse(Console.ReadLine(), out int qty) && qty > 0)
{
double total = prices[0] * qty;
Console.WriteLine($"Total: {total:C}");
}
else
{
Console.WriteLine("Invalid input, please enter a positive integer");
}
TEXT
📖 参照専用
Item Price Stock
------------------------
Apple 5.50 120
Banana 3.20 85
Orange 4.80 200
Enter quantity to purchase:
5
Total: ¤27.50
❓ よくある質問
Q int.Parse と int.TryParse の違いは何ですか?
A Parse は失敗時に例外をスローしますが、TryParse は例外をスローせずに bool 型を返します。TryParse を使用することをお勧めします。
Q 文字列補間において、リテラルな中括弧を出力するにはどうすればよいですか?
A エスケープするには二重の中括弧を使用します。
{{ は { として出力され、}} は } として出力されます。Q Console.ReadLine はどのような場合に null を返しますか?
A 入力ストリームが末尾に達したときに null を返しますが、対話型コンソールではこのようなことはめったに起こりません。
Q 通貨記号が「¤」と表示されるのはなぜですか?
A 「¤」は文化に依存しない通貨記号です。システムのロケールを設定するか、文化情報を指定することで、適切な通貨記号が表示されます。
📖 まとめ
- Console.Write は改行を挿入しませんが、WriteLine は挿入します
- プレースホルダー
{0}と補間$"{var}"は、2つの書式設定手法です {0,10}は右揃え、{0,-10}は左揃え{0:F2}は小数点以下の桁数を指定します- 一般的な指定子:C(通貨)、D(小数)、F(固定小数点)、P(パーセント)、X(16進数)
- ReadLine は文字列を読み込みます。数値に変換するには、Parse、TryParse、または Convert を使用してください。
- ReadKeyは、Enterキーを押す必要なく、1つのキーを読み取ります
- 補間内の式では、配置と書式の組み合わせが可能
📝 練習問題
- 文字列補間を使用して、名前、年齢、身長が記載されたプロフィールカードを出力するプログラムを作成してください。各項目は揃えて表示されるようにしてください。
- 簡単な電卓プログラムを作成する:2つの整数と演算子を入力し、結果を出力する。入力の処理にはTryParseを使用する
- 5つの商品を、商品名、単価(F2形式)、在庫数を表形式で出力するプログラムを作成してください。列幅はすべて10に統一してください。
- 整数を読み取り、10進数(D8)、16進数(X)、およびパーセント(P)の形式で出力するプログラムを作成してください。
- Console.ReadKey を使用してメニューを選択するプログラムを作成してください。1 を押すと時刻が表示され、2 を押すと終了します。