如何知道std :: cin是否来自重定向?

时间:2013-12-25 11:08:23

标签: c++ windows command-line std cin

假设我有一个小程序,如:

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..."
} 

我想仅在输入来自控制台的情况下打印参数请求,但如果程序是使用重定向myApp.exe < textfile.txt启动的,那么我认为打印它没有意义。

我该如何实现这种行为?

编辑 - 我正在开发Windows。

2 个答案:

答案 0 :(得分:3)

此答案基于@JoachimPileborg评论

#include <io.h>
#include <stdio.h>
bool isInputRedirected()
{
    return (!(_isatty(_fileno(stdin))))
}

Original source in MSDN

答案 1 :(得分:1)

检测重定向的技术手段取决于操作系统:C ++标准库没有这方面的功能,而AFAIK(虽然我可能会弄错)也没有Boost。


你可以做的最好的方法是为程序调用者提供一些方法来告诉它是否应该提供一个交互式界面,将责任传递给知道足够接受它的部分。

例如,您可以使用程序参数,和/或您可以将主要功能构建为从两个不同的前端程序调用的库。