c ++从文件重定向和键盘读取

时间:2009-12-04 18:16:41

标签: c++

我的程序从用户输入[键盘]中读取整数列表并计算一些统计信息

用户输入“x”以终止输入过程。

例如,

输入以空格分隔的整数(输入x退出):1 2 3 4 5 x

但是现在我想要包含要从文件重定向读取的输入。因此,如果后跟x的数字在数据文件中,那么程序应该从那里取出,如果没有则提示用户

5 个答案:

答案 0 :(得分:2)

使用isatty作为您的文件描述符  (标准输入为0)

示例:

#include <unistd.h>
main(){
  if(isatty(0))
    puts("tty");  // print some prompt
  else
    puts("pipe"); // not really needed in your case
}

答案 1 :(得分:0)

您可以使用fstream and iostream从文件中读取字符串。

然后从那里你只需解析字符串以查看它们是否包含正确的数据。如果没有,提示用户输入?

答案 2 :(得分:0)

如果您的意思是您可以使用文件作为命令行参数调用您的程序,在这种情况下您希望它从标准输入读取,您可以执行以下操作:

#include <fstream>
#include <iostream>

void run(std::istream& in) {
   // read all input from 'in' and run your program as normal
}

int main(int argc, char **argv) {
   if(argc == 1) {
      run(std::cin);
   } else if(argc == 2) {
      std::ifstream fin(argv[1]);
      run(fin);
   }

   return 0;
}

这样,如果你打电话

./prog

它将从标准输入(即键盘)读取,如果你打电话

./prog foo.txt

它将从文件foo.txt中读取。

在检查命令行参数时,您可能需要做更多的工作,但这是基本的想法。

答案 3 :(得分:0)

一种不需要任何程序更改的方法是让shell为您执行重定向。

在Windows和Unix shell上,&lt;将文件重定向到程序的 stdin

所以,在控制台上的unix / linux / mac上:

./app < file.txt

或windows,在命令提示符下,只需:

app < file.txt

将获取 file.txt 的内容并将其作为 stdin 发送到名为“ app ”的程序。

答案 4 :(得分:0)

在unix框中,以下内容应该有效:

progream <file

其中program是你的程序,文件包含用户输入的输入。