将标准输入重定向到标准输出

时间:2020-07-26 03:50:11

标签: c stdout stdin

假设我有一个琐碎的C程序,它将两个数字加在一起:

#include <stdio.h>

int main(void) {
    int a, b;
    printf("Enter a: "); scanf("%d", &a);
    printf("Enter b: "); scanf("%d", &b);

    printf("a + b = %d\n", a + b);
    return 0;
}

我没有在每次执行时都键入终端,而是将ab的值输入文件:

// input.txt
10
20

然后我将stdin重定向到此文件:

./a.out < input.txt

该程序可以运行,但是其输出有点混乱:

Enter a: Enter b: a + b = 30

是否有一种方法可以将stdin重定向到stdout,因此输出看起来就像用户手动键入值一样,即:

Enter a: 10
Enter b: 20
a + b = 30

2 个答案:

答案 0 :(得分:6)

您可以为此使用期望。 Expect是用于自动执行交互式命令行程序的工具。这是您如何在以下位置自动键入这些值的方法:

#!/usr/bin/expect
set timeout 20

spawn "./a.out"

expect "Enter a: " { send "10\r" }
expect "Enter b: " { send "20\r" }

interact

这将产生如下输出:

$ ./expect     
spawn ./test
Enter a: 10
Enter b: 20
a + b = 30

还有更多示例here

答案 1 :(得分:0)

忘记提示;试试这个:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int a, b;
    if (scanf("%d%d", &a, &b) != 2) exit(EXIT_FAILURE);
    printf("%d + %d = %d\n", a, b, a + b);
    return 0;
}

您可能想找到一种方法,让您的用户知道可执行文件的内容,也许添加命令行选项?

$ echo "10 20" |./a.out
10 + 20 = 30

$ ./a.out --help
Program reads two integers and displays their sum

$