我最近一直在学习C ++,而且我已经开始了一个小项目,这样我放学后就不会觉得无聊。
我正在创建一个带有命令参数的程序,如果格式不正确,则会抛出“USAGE”消息。
这是我的代码:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
if ( argc != 3 )
{
cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
return 1;
}
else
{
if ( argv[1] == "-f" || argv[1] == "-F" )
{
}
else if ( argv[1] == "-c" || argv[1] == "-C" )
{
}
else
{
cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
return 1;
}
}
return 0;
}
但出于某种原因,无论我输入什么都会抛出“USAGE”消息。
如果有人能告诉我我做错了什么,那就太棒了!
答案 0 :(得分:5)
将字符串与strcmp
进行比较,而不与==
进行比较:
if ( !strcmp( argv[1], "-c" ) ) ...
答案 1 :(得分:4)
您必须使用string.h
来比较strcmp(s1, s2)
库中的c样式字符串。
如果字符串0
和s1
相等,则s2
函数返回1
s1
s2
和-1
如果s1
和s2
按字母顺序排列,则不按字母顺序排列#include <iostream>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
if ( argc != 3 )
{
cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
return 1;
}
else
{
if ( strcmp(argv[1], "-f") == 0 || strcmp(argv[1], "-F") == 0 )
{
}
else if ( strcmp(argv[1], "-c") == 0 || strcmp(argv[1], "-C") == 0 )
{
}
else
{
cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
return 1;
}
}
return 0;
}
。
以下是代码:
{{1}}
答案 2 :(得分:3)
这不是比较char*
的工作方式。使用strcmp
或创建新的std::string
,如下所示:
std::string argument(argv[1]);
if ( argument == "-f" || argument == "-F" )
{
//some code here
}
else if ( argument == "-c" || argument == "-C" )
{
//some code here
}
答案 3 :(得分:3)
您正在尝试将c样式字符串与==
运算符进行比较。这不会像你期望的那样在C ++中工作。
相反,您需要使用比较两个任意序列的函数strcmp
或equal
。
您也可以将c字符串转换为std::string
然后进行比较。