关于K& R的问题 - 重定向输入

时间:2011-07-09 22:27:18

标签: c

在“The C Programming Language”(K& R)的第1.6节中,有一个示例程序,作者声明:

The output of this program ON ITSELF is
    digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345

然后有许多类似的程序等包括练习。我理解代码逻辑的所有内容并且可以进行练习,但是我如何在作者或网上许多其他文件上实际测试我的程序?

编辑:问题应该是:如何将文件输入重定向到程序?

3 个答案:

答案 0 :(得分:4)

第1.6章中的程序从stdin读取输入。要使它从文件中读取,您可以(在大多数操作系统上)通过运行您的程序将stdin重定向为文件:

myprogram < somefile

或者你可以像这样管道文件的内容:

cat somefile | myprogram

在Windows上,您使用的是type程序,而不是cat

type somefile | myprogram

答案 1 :(得分:2)

这是使用重定向。它不是来自键盘的程序输入,而是来自文件。

在DOS提示符下: -

C:&gt; myexe&lt;文件名

在Windows中使用命令shell进入DOS提示符。或者开始运行..并输入cmd

在Mac上,这称为终端(在“探照灯”中键入“终端”以进入终端)。

答案 2 :(得分:2)

默认情况下,程序将从stdin获取输入,stdin是一个基于键盘输入填充的缓冲区(默认情况下)。但是,您也可以告诉程序从文本文件中填充标准输入。

使用基于* nix的系统,您只需创建一个文本文件,并将其保存为您想要的任何内容,例如“test_input”。填写您想要传递给您的程序的输入,保存它,然后像这样运行您的程序:

./a.out < test_input

这称为重定向,因为您“重定向”(如果您愿意)输入来自文件,而不是默认(键盘)。它有两种方式,您也可以将输出重定向到文件,而不是使用另一个尖括号的'stdout','&gt;'。

使用Visual Studio ,而不是弹出打开命令提示符来执行上述命令之类的操作,您可以使用C ++ ifstream,将文本文件放在本地目录中,然后只需使用ifstream到处都是stdin:

ifstream sin("test_input.txt" , ifstream::in);
int value;
sin >> value;

您可以使用ofstream输出到文件。

请注意,ifstreams和ofstreams是C ++对象,并且不能在C中使用。虽然您可以写入文件并从C中读取文件,但它比简单地替换cout和cin的所有实例有点棘手。你实际上必须考虑你正在阅读和写作的内容:)