C ++:ファイルからcinにリダイレクトし、ユーザーが入力を入力したかのように表示する方法

C ++:ファイルからcinにリダイレクトし、ユーザーが入力を入力したかのように表示する方法

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

おすすめ記事