我的程序从用户输入[键盘]中读取整数列表并计算一些统计信息
用户输入“x”以终止输入过程。
例如,
输入以空格分隔的整数(输入x退出):1 2 3 4 5 x
但是现在我想要包含要从文件重定向读取的输入。因此,如果后跟x的数字在数据文件中,那么程序应该从那里取出,如果没有则提示用户
答案 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是你的程序,文件包含用户输入的输入。