C言語における入出力関数

こんにちは、将来のプログラマーたち!今日は、C言語における入出力(I/O)の世界に興味深く飛び込みましょう。あなたの近所の親切なコンピュータの先生として、私はこのコーディングの重要な側面を案内します。では、仮想のメモ帳を手にとって、一緒に潜りましょう!

C - Input & Output

C言語の標準ファイル

キーボードを敲く前に、基本的事情について話しましょう:C言語の標準ファイル。Cプログラムを実行すると、自動的に3つのファイルが開かれます。まるで、プログラムの外部との通信を管理するための3人の助手的存在が準備されているかのようです。

  1. stdin(標準入力)
  2. stdout(標準出力)
  3. stderr(標準エラー)

これらのファイルは、プログラムがユーザーとシステムとコミュニケーションを取るための扉です。stdinをプログラムの耳、stdoutをその口、stderrを何かが間違ったときに叫ぶ方法と考えてください。coolですね?

入出力関数の種類

それでは、これらのファイルと対話するためのツールについて話しましょう。C言語には、主に2つの種類のI/O関数があります:

  1. フォーマット無しのI/O関数
  2. フォーマット付きのI/O関数

フォーマット無しの関数は生のデータを扱いますが、フォーマット付きの関数はデータのフォーマットを指定できます。これは、/plain rice(フォーマット無し)と美しく盛り付けられた gourmet meal(フォーマット付き)の違いのようなものです。どちらも仕事を成し遂げますが、 latterはプレゼンテーションに対してより多くの制御を提供します!

フォーマット無しの文字入出力関数:getchar() と putchar()

まずはシンプルなフォーマット無しの文字I/Oから始めましょう。最初の2つの関数に meet します:getchar()putchar()

getchar()

getchar() は標準入力(通常はキーボード)から1文字を読み取ります。まるで、1文字をタイプするのを待つ忍耐強いリスナーのようです。

#include <stdio.h>

int main() {
char ch;
printf("Enter a character: ");
ch = getchar();
printf("You entered: ");
putchar(ch);
return 0;
}

この例では、getchar() があなたが文字をタイプするのを待ち、それを ch に格納します。シンプルですが、非常に強力です!

putchar()

putchar()getchar() の対応関数です。標準出力(通常は画面)に1文字を输出します。まるで、1文字ずつアナウンスする町の告知人のようなものです。

#include <stdio.h>

int main() {
char ch = 'A';
printf("Printing a character: ");
putchar(ch);
return 0;
}

ここで、putchar(ch) が文字 'A' を画面に表示します。シンプルで効果的です!

フォーマット付き文字列入出力関数:gets()、fgets()、puts()、および fputs()

それでは、レベルアップして文字列I/Oについて話しましょう。これらの関数は全文を扱います。

gets() と fgets()

gets() は標準入力から一行を読み取ってバッファーに格納しますが、バッファーオーバーフローのチェックを行わないため、安全ではありません。代わりに、より安全な兄弟である fgets() を推奨します。

#include <stdio.h>

int main() {
char name[50];
printf("Enter your name: ");
fgets(name, sizeof(name), stdin);
printf("Hello, %s", name);
return 0;
}

この例では、fgets() が一行のテキスト(あなたの名前)を読み取って name 配列に格納します。安全です因为它指定了最大の文字数を読み取ります。

puts() と fputs()

puts() は文字列を標準出力に書き込み、改行を追加します。ファイルストリームの対応関数は fputs() です。

#include <stdio.h>

int main() {
char greeting[] = "Hello, World!";
puts(greeting);  // Outputs: Hello, World! (with a newline)
fputs(greeting, stdout);  // Outputs: Hello, World! (without a newline)
return 0;
}

puts() は自動的に改行を追加しますが、fputs() はより多くの制御を提供します。

フォーマット付き入出力関数:scanf() と printf()

それでは、C言語のI/Oの重鎮である scanf()printf() について話しましょう。これらの関数は、多様で強力です。

scanf()

scanf() は標準入力からフォーマットされた入力を読み取ります。これは、指定されたように準備された食物しか受け付けない厳しい食べ手のようなものです。

#include <stdio.h>

int main() {
int age;
float height;
printf("Enter your age and height: ");
scanf("%d %f", &age, &height);
printf("You are %d years old and %.2f meters tall.\n", age, height);
return 0;
}

ここで、scanf() は入力から整数(%d)と浮動小数点数(%f)を読み取ります。ageheight 之前的 & は重要です - これは scanf() に値を格納する場所を教えます。

printf()

printf()scanf() の出力対応関数です。これは、データを美しいフォーマットされた文字列に紡ぐ名手のようなものです。

#include <stdio.h>

int main() {
int apples = 5;
float price = 0.75;
printf("I have %d apples, each costing $%.2f.\n", apples, price);
return 0;
}

この例では、printf() がデータをniceで読みやすい文章に格式化します。

C言語のフォーマット指定子

フォーマット指定子は、scanf()printf() が非常に強力な理由の一部です。データをどのように解釈または表示するかを指示する指令のようなものです。

以下は一般的なフォーマット指定子の表です:

指定子 データ型
%d 整数
%f 浮動小数点数
%c 文字
%s 文字列
%lf 双精度浮動小数点数
%x 16進数
%o 8進数
%p ポインタ

これらの指定子は修正できます。例えば、%.2f は浮動小数点数を2桁の小数で表示し、%5d は整数を5文字分のフィールド幅で表示します。

そして、ここまでがC言語の入出力の基本です。練習は完璧を生みます。ですから、外に出てコーディングを始めてください!もしかしたら、次のbig thing in techを作るかもしれません。次回まで、ハッピーコーディング!

Credits: Image by storyset