これまで使ってきたprintf関数及びscanf関数は、画面に文字を表示する関数、キーボードからの文字入力を受け取る関数だと説明しました。ですが、これは厳密には異なります。厳密な意味は、それぞれ標準出力に文字を表示する、標準入力からの文字入力を受け取るという意味です。つまり、画面またはキーボードとは限らないのです。入出力をあえて抽象化し、プログラムの汎用性を拡大するためにこのような仕様となっています。通常は、標準入力はキーボードで、標準出力はPC画面のウィンドウのことです。
リダイレクト
一般的に、Windows OSには標準出力及び標準入力を変更する機能があります。それをリダイレクトといいます。特定のファイルを標準入力や標準出力に割り当てることができます。
コマンド > 標準出力のファイル名
コマンド < 標準入力のファイル名
まずは、リダイレクトをせずに次のプログラムを実行します。
#include<stdio.h>
int main(void){
char str[100];
scanf("%s",str);
printf("Hello,world %s\n",str);
return 0;
}
コマンドプロンプトの画面
C:\Users\gukos\Desktop\clan>main
Tom
Hello,world Tom
C:\Users\gukos\Desktop\clan>
このように、コマンドプロンプトの画面に出力されます。エクスプローラーから直接実行するのではなく、コマンドプロンプトから実行してください。
次に、標準出力をファイルにリダイレクトします。
コマンドプロンプトの画面
C:\Users\gukos\Desktop\clan>main > out.txt
Tom
C:\Users\gukos\Desktop\clan>
out.txtの内容
Hello,world Tom
コマンドプロンプトの画面にprintfの文字列が表示されなくなった代わりに、out.txtファイルに出力されています。改行もされています。
次は、標準入力をファイルにリダイレクトします。
in.txtの内容
Tom
コマンドプロンプトの画面
C:\Users\gukos\Desktop\clan>main < in.txt
Hello,world Tom
C:\Users\gukos\Desktop\clan>
標準入力、標準出力ともにリダイレクトすることも可能です。
in.txtの内容
Smith
コマンドプロンプトの画面
C:\Users\gukos\Desktop\clan>main < in.txt > out.txt
C:\Users\gukos\Desktop\clan>
out.txtの内容
Hello,world Smith
まとめ
printfやscanfは、標準入力及び標準出力に対して処理を行う関数である。
よって、標準入出力を変えると、ファイルに書き込み、読み込みができる。
コメント