cin
私は8つの数字を読み、それをbashシェルで実行する単純なC ++プログラムを持っています。端末で実行すると、次のようになります(ユーザーは数字1〜8を入力します)。
./add8
Please enter eight numbers: 1 2 3 4 5 6 7 8
The sum is: 36
8つの数字(「1 2 3 4 5 6 7 8」および改行文字など)を含むファイルをプログラムにリダイレクトしようとしましたが、入力内容は画面に表示されません。
./add8 < my_eight_numbers.txt
Please enter eight numbers: The sum is: 36
ファイルをプログラムにリダイレクトすることは可能ですか?そしてユーザーの種類に応じて入力を表示しますか?
ベストアンサー1
デフォルトでは、端末に標準入力があるかどうか、または一種のパイプ/リダイレクトがあることを確認する必要があります。これにはこの機能を使用できますisatty
。
int main(void){
char buffer[N];
int sum;
/* Load buffer from stdin with fgets, fread, read, ... */
if(!isatty(fileno(stdin)))
printf("%s\n", buffer);
/* Compute sum... */
printf("The sum is %d.\n", sum);
}
この場合、stdinがttyでない場合(入力がまだ入力されていないことを意味します)、プログラムは合計を計算する前にバッファを印刷します。
私のシステムでは、isatty
関数がunistd.h
。また、stdio.h
取得する必要がありますfileno
。