【问题标题】:check if the user's input is equal to another char [duplicate]检查用户的输入是否等于另一个字符 [重复]
【发布时间】:2020-12-07 01:46:12
【问题描述】:

我正在尝试检查用户输入是否等于"l"。当我按"l" 然后输入时,我应该将"test worked" 发送到控制台,但我没有。

这是我的 C++ 代码

char userIn[8];
std::cin >> userIn;
if (userIn == "l") {
    std::cout << "test worked";
}

【问题讨论】:

  • 双引号用于字符串。单引号用于 char 值。
  • 如果 userInchar* 则 == 将不起作用。如果它是std::string,它将起作用。如果它是一个字符,你需要 '1' 而不是 "1" 才能使 == 起作用。
  • 要检查 C 字符串是否相等,请使用 strcmp()
  • @Chipster :那个编辑似乎有隐藏的知识。你怎么知道userIn的声明是什么?
  • @L.ScottJohnson 它在原版中。它被不正确的格式隐藏了。

标签: c++ char


【解决方案1】:

您将char[8]const char[2] 进行比较。两者都衰减为指向其第一个元素的指针。所以你是在比较指针,而不是内容。并且两者位于不同的内存地址,所以指针比较为假。

将您的 char[] 更改为 std::string,其中实现了 operator==

std::string userIn;
std::cin >> userIn;
if (userIn == "l") {
    std::cout << "test worked";
}

【讨论】:

  • 谢谢,对于我现在所做的事情,我只关心输入一个字母,有些人已经发布了多个字母的答案,这可能对我将来有用。
  • @Rockyroad000 “我只关心输入单个字母” - 那你为什么将 userIn 声明为 char[8] 数组而不是单个 @987654329 @?
【解决方案2】:

userIn 的类型是什么? 如果它是 char 那么你必须使用单引号('')来检查值。 否则双引号('')

char userIn;
std::cin >> userIn;
if (userIn == 'l') {
    std::cout << "test worked";
}

【讨论】:

  • 请查看问题的编辑。 userIn 的类型已定义。
  • userIn 被定义为一个字符,在用户输入之前它没有任何内容
【解决方案3】:

为了让它按照我想要的方式工作,我必须将其更改为

char userIn[8];

std::cin >> userIn;
if (*userIn == 'l') {
    std::cout << "test worked";
}
else {
    std::cout << userIn;
}

【讨论】:

  • 请记住,您可能应该检查std::cin 是否仍处于良好状态,并且在像这样取消引用第一个字符之前,您还应该检查userIn 的长度。
  • 我看到你发布了一个自我回答。谢谢。我无法从您的问题中判断用户输入是否始终是单个字符,或者您是否只想将第一个字符与'l' 进行比较。您可以编辑问题以澄清一下吗?
  • 此代码仅比较用户输入的第一个字符。如果用户输入以l 开头的任何内容,则此代码将测试为真。
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 2022-01-24
  • 1970-01-01
  • 2012-09-28
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多