将-q开关添加到参数列表中

时间:2013-07-08 21:47:05

标签: c++ command-line-arguments command-prompt

我试图想办法在我的命令行参数中添加一个可选的quiet开关。我正在处理的程序是一个文本到HTML转换器,至少需要包含一个文本源文件,以便程序运行。我想要得到的是,当用户在参数列表中的任何位置输入-q时,程序仍然会运行,但会抑制输出到控制台。我已经尝试了一些if语句和循环,它们会为我的infile和outfile变量重新分配参数值,但那些也不起作用。代码可以在这里找到:https://gist.github.com/anonymous/ab8ecfd09bddba0d4fcc。我对使用C ++仍然相对较新,所以如果你提供一个关于如何以一种简单的方式更接近我的目标的解释,我真的很感激。

1 个答案:

答案 0 :(得分:0)

有些东西马上跳出来,你正在测试参数是否等于-q

if( strcmp( argv[1], "-q" ) != 0) //This is an example of what I am trying to do.
{
    quiet = true;
    infile.open( argv[2] );
}

这是不正确的。 strcmp返回两个字符串之间的词法差异:     http://www.cplusplus.com/reference/cstring/strcmp/

所以我相信你想要

if( strcmp( argv[1], "-q" ) == 0) //This is an example of what I am trying to do.
{
    quiet = true;
    infile.open( argv[2] );
}

就像我说的那样,我没有测试任何东西,只是跳出来对我说。

修改

我将如何解析sourcefile,destfile和-q选项

std::string sourceFile;
std::string destFile;

if ( argc == 3 )
{
    sourceFile = std::string( argv[1] );
    destFile = std::string( argv[2] );
}
else if ( argc == 4 )
{
    // quiet mode is enabled
    std::string arg1( argv[1] );
    std::string arg2( argv[2] );
    std::string arg3( argv[3] );

    if ( arg1 != "-q" )
        vec.push_back( std::string( arg1 );
    if ( arg2 != "-q" )
        vec.push_back( std::string( arg2 );
    if ( arg3 != "-q" )
        vec.push_back( std::string( arg3 );

    if ( vec.size() != 2 )
    {
        // maybe error? 
    }
    else
    {
        sourceFile = vec[0];
        destFile = vec[1];
    }
}

当然不是那么干净,我没有测试过,所以可能会有一个小错误。