带有 OR 运算符的 C++ if 语句无法正常工作
C++ if statement with OR operator not working as I expect
最近在学习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" 消息。
如果有人能告诉我我做错了什么,那就太棒了!
字符串与 strcmp
比较,而不是与 ==
:
if ( !strcmp( argv[1], "-c" ) ) ...
这不是比较 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
}
您将不得不使用 strcmp
来比较 string.h
库中的 C 风格字符串。
函数strcmp(s1, s2)
returns 0
如果字符串s1
和s2
相等,1
如果s1
如果 s1
和 s2
按字母顺序排列,则 s2
和 -1
不按字母顺序排列。
代码如下:
#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;
}
您正在尝试将 C 风格的字符串与 ==
运算符进行比较。这不会像您在 C++ 中期望的那样工作。
相反,您需要使用函数 strcmp
或 equal
来比较两个任意序列。
您也可以将 c 字符串转换为 std::string
然后比较它们。
最近在学习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" 消息。
如果有人能告诉我我做错了什么,那就太棒了!
字符串与 strcmp
比较,而不是与 ==
:
if ( !strcmp( argv[1], "-c" ) ) ...
这不是比较 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
}
您将不得不使用 strcmp
来比较 string.h
库中的 C 风格字符串。
函数strcmp(s1, s2)
returns 0
如果字符串s1
和s2
相等,1
如果s1
如果 s1
和 s2
按字母顺序排列,则 s2
和 -1
不按字母顺序排列。
代码如下:
#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;
}
您正在尝试将 C 风格的字符串与 ==
运算符进行比较。这不会像您在 C++ 中期望的那样工作。
相反,您需要使用函数 strcmp
或 equal
来比较两个任意序列。
您也可以将 c 字符串转换为 std::string
然后比较它们。