C言語 | 高度な機能 | 標準入出力 - fprintf(), fscanf()

コマンドの出力とキーボードの入力は、特別な FILE ストリームとして表現されます。

基本入出力

printf() は標準出力へ書き込み、scanf() は標準入力から読み取ります。標準エラー出力はエラーメッセージ用の別ストリームです。利用者はプログラムを変更せずにストリームをリダイレクトできます。

stdio.h は次のストリームを提供します。

FILE *stdin;
FILE *stdout;
FILE *stderr;

ファイル用の関数でも利用できます。

#include <stdio.h>

int main() {
  char chError[0xFF];
  fputs("エラーメッセージを入力してください。 >", stdout);
  fgets(chError, 0xFF, stdin);
  fputs(chError, stderr);
  return 0;
}

書式付きのストリーム入出力には fprintf()fscanf() を使います。

int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);

ストリーム引数を除けば、printf()scanf() と同様に動作します。

#include <stdio.h>

int main() {
  char chSelect;
  fprintf(stdout, "出力先を選択してください。 o/e>");
  fscanf(stdin, "%c", &chSelect);

  switch (chSelect) {
  case 'e':
  case 'E':
    fprintf(stderr, "Kitty on your lap\n");
    break;
  case 'o':
  case 'O':
    fprintf(stdout, "Kitty on your lap\n");
    break;
  }
  return 0;
}

stdinstdoutstderr の代わりにファイルストリームを渡すと、同じ書式付き入出力をファイルに適用できます。