目前我有一个从标准输入读取的程序,如果没有输入,程序偶尔需要继续运行,通常这是一个测试脚本没有'输入'可以这么说.
program -v1 -v2 -v3 <input >output
v1 - v3分别是命令行参数
基本上,如果没有给出"输入",程序会将命令行参数及其各自的含义吐出,然后退出.
但是目前如果给它一个空的测试文件,或者只是在运行std :: getline上的块之后按下输入,我用来输入命令.
while(std::getline(std::cin,foo)
{do stuff}
Run Code Online (Sandbox Code Playgroud)
其中foo是一个字符串.
如何do stuff在没有输入的情况下将其运行至少一次然后退出?如果输入do stuff,则标准输入中的每一行都会发生一次.
是否可以切换到do-while循环,并检查预循环是否有任何输入?
就像是
if cin empty
set flag
do
{do stuff
check flag}
while(getline)
Run Code Online (Sandbox Code Playgroud)
或者是非阻塞的,在c ++中是不可能的?
这个问题似乎反复重复,但我找不到一个明确的答案,甚至是一个平台无关的答案(这个程序本质上是学术性的,在windows上编码并在unix上测试).
我可以这样称呼我的程序:
1. ./main solved.txt
2. cat unsolved.txt | ./main
3. cat unsolved.txt | ./main solved.txt
Run Code Online (Sandbox Code Playgroud)
我正在使用它来知道我是否需要在C POSIX标准上从管道读取数据:
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <unistd.h>
int main( int argumentsCount, char* argumentsStringList[] )
{
std::stringstream inputedPipeLineString;
if( argumentsCount > 1 )
{
printf( "argumentsStringList[1]: %s", argumentsStringList[ 1 ] );
}
// If it is passed input through the terminal pipe line, get it.
if( !isatty( fileno( stdin ) ) )
{
// Converts the std::fstream "std::cin" to std::stringstream which …Run Code Online (Sandbox Code Playgroud) int main()
{
if (cin)
{
(...)
}
else
{
cerr << "No Data!!!" << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查输入是否有任何数据,但是即使我在开始时只输入Ctrl+也不会显示错误消息Z。