フォーマット付き出力 printf();
C言語では、printf関数を使用して様々な形式でデータを出力することができます。以下はその基本的な使い方です。
#include <stdio.h>
int main() {
// 文字列の出力
puts("こんにちは、世界!");
// 整数の出力
int value = 456;
printf("整数: %i\n", value);
// 浮動小数点数の出力(指定桁数まで)
double pi_val = 3.14159265;
printf("円周率: %.3f\n", pi_val);
// 単一文字の出力
char symbol = 'B';
printf("文字: %c\n", symbol);
// 文字配列の出力
char message[] = "挨拶";
printf("メッセージ: %s\n", message);
// 十六進数による出力
int hex_num = 1023;
printf("十六進表示: %#x\n", hex_num);
// フィールド幅と配置の調整
int data = 78;
printf("|%06d|%-6d|\n", data, data);
// ポインタのアドレス出力
int var = 123;
int *address = &var;
printf("アドレス: %p\n", (void *)address);
// 真偽値の出力
_Bool status = 1;
printf("ステータス: %d\n", status);
// 出力された文字数の取得
int count;
printf("テスト出力", &count);
printf("\n出力された文字数: %d\n", count);
return 0;
}
このコード例では、異なるデータ型に対するprintf関数の使用方法が示されています。
フィールド幅と配置の詳細【フィールド制御】
上記のコード内で%06dや%-6dといった書式指定子が使われています。これらはそれぞれ次の機能を持っています:
%06d: 数値を最低6桁で表示し、不足分は先頭に0で埋めます。%-6d: 数値を左寄せにして最小6桁で表示します。
標準入力 scanf();
scanf関数は、C言語において標準入力からデータを読み込むための関数です。以下の形式で利用されます。
基本構文:
int scanf(const char *format, ...);
主な変換指定子:
%d: 整数の入力%f: 浮動小数点数の入力%c: 文字の入力%s: 空白を除く文字列の入力
例:
#include <stdio.h>
int main() {
int age_input;
char name_input[30];
printf("年齢を入力してください: ");
scanf("%d", &age_input);
printf("名前を入力してください: ");
scanf("%29s", name_input); // 安全のために最大長を設定
printf("あなたは%sで、%d歳です。\n", name_input, age_input);
return 0;
}
単一文字の入力 getchar();
getchar関数は、キーボードからの単一文字入力を処理するものです。
例:
#include <stdio.h>
int main() {
printf("任意のキーを押してEnterを押してください: ");
int key = getchar(); // 文字を読み込む
printf("入力されたキー: %c\n", key);
return 0;
}
注意点:
getcharはバッファリングされるため、前の入力後に残る改行\nに注意が必要です。
バッファの理解と問題解決
C言語では、scanfやgetcharなどの関数が内部バッファを使用します。これにより、効率的なデータ処理が可能になりますが、場合によってはバッファ内に不要なデータが残ることがあります。
対策:
while ((getchar()) != '\n'); // 改行までのバッファクリア
多岐にわたる条件分岐 switch 文
switch文は、複数の選択肢の中から特定の処理を選ぶ際に便利です。
例:
#include <stdio.h>
int main() {
int option = 3;
switch (option) {
case 1:
puts("オプション1を選択");
break;
case 2:
puts("オプション2を選択");
break;
case 3:
puts("オプション3を選択");
break;
default:
puts("該当するオプションはありません");
}
return 0;
}
文字列比較 strcmp();
strcmp関数は、2つの文字列を辞書順で比較します。
例:
#include <stdio.h>
#include <string.h>
int main() {
const char *text1 = "リンゴ";
const char *text2 = "みかん";
if (strcmp(text1, text2) == 0) {
puts("両方の文字列は一致しています");
} else if (strcmp(text1, text2) < 0) {
puts("最初の文字列が辞書順で先に来ます");
} else {
puts("二番目の文字列が辞書順で先に来ます");
}
return 0;
}