相关疑难解决方法(0)

非阻塞std :: getline,如果没有输入则退出

目前我有一个从标准输入读取的程序,如果没有输入,程序偶尔需要继续运行,通常这是一个测试脚本没有'输入'可以这么说.

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上测试).

c++ istream

12
推荐指数
2
解决办法
5577
查看次数

如何知道C++ 11上何时通过终端管道输入?

如何知道C++ 11上何时通过终端管道输入?

我可以这样称呼我的程序:

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)

c++ posix c++11

10
推荐指数
1
解决办法
489
查看次数

如何检查cin是文件结尾?

int main()
{
    if (cin)
    {
        (...)
    }
    else
    {
        cerr << "No Data!!!" << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想检查输入是否有任何数据,但是即使我在开始时只输入Ctrl+也不会显示错误消息Z

c++

5
推荐指数
1
解决办法
3158
查看次数

标签 统计

c++ ×3

c++11 ×1

istream ×1

posix ×1