比方说,我有一个小程序,如:
int main() { cout << "Please enter the param >" << endl; // <-- Print only if input from console std::string param; cin >> param; //Doing some calculations... cout << "result is..." }
我只想input来自控制台的input请求,但是如果程序是以redirectmyApp.exe < textfile.txt
启动的,那我看不出有什么意义。
我怎样才能做到这一点?
编辑 – 我正在打开窗户。
这个答案是基于@JoachimPileborg的评论
#include <io.h> #include <stdio.h> bool isInputRedirected() { return (!(_isatty(_fileno(stdin)))) }
MSDN中的原始来源
检测重定向的技术手段取决于操作系统:C ++标准库没有这个功能,而且AFAIK(尽管我可能会误)也没有Boost。
你可以做的最好的做法是为程序调用者提供一些方法来告诉它是否应该提供一个交互式界面,把责任传递给知道足够的部分。
例如,您可以使用程序参数 ,并且/或者可以将主要功能构造为从两个不同的前端程序调用的库。