如何将用户输入(来自std :: cin)与字符串进行比较?

4

这个听起来很简单,但是我遇到了一些奇怪的问题。

在我的程序中有以下代码:

std::cout << "Would you like to generate a complexity graph or calculate global complexity? (graph/global)\n";
char ans[6];
std::cin >> ans;

if (ans != "global") std::cout << ">>" << ans << "<<" << std::endl;

当我运行我的程序并在提示输入时输入"global",程序返回:
>>global<<

为什么 if 语句会被评估为 true?

1
使用std::string代替char数组。 - Jason C
2个回答

3
  1. 在比较C风格字符串时,应该使用strcmpstrncmpans != "global" 只是比较指针指向的内存地址,而不是字符串的内容。

  2. char ans[6]; 应该改为 char ans[7];,因为对于 "global",你需要一个额外的 char 来存放终止空字符 '\0'

为避免此类问题,您应使用 std::string


0
你将 ans 声明为 char 数组,因此如果表达式 if (ans != "global")ans 表示指向字符串开头的指针。因此,您比较两个显然不相等的指针,表达式求值为 true。如果仍然想将 ans 声明为 C 风格的字符串,可以在比较之前从中构造一个 std::string
if (std::string(ans) != "global") {......}

或者直接将ans声明为std::string而不是char[]

1
使用C++14字面量,ans != "global"s 可用。 - ikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接