为什么我的if语句不适用于c ++中的字符串?

时间:2018-08-08 18:56:34

标签: c++ if-statement c++14

我是使用c ++的新手,我尝试使用谷歌搜索解决方案,但是遇到的每个问题与我所面临的问题截然不同,所以我无法弄清楚。从Powershell运行.exe时,我遇到的问题是我的“ if”语句被完全忽略了。

https://pastebin.com/aE6MiQig

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string q;
    string w;
    string Bob;
    string Emily;
    {
        cout << "Who is this? ";
        cin >> q;
        if (q == Bob)
        {
            cout << "Hey there bro. ";
        }
        if (q == Emily)
        {
            cout << "Hi friend :) ";
        }
        else
        {
            cout << "Oh hey " << q << ", how are you? ";
        }
        cin >> w;
        cout << "Hey, that's " << w;
    }
    return 0;
}

当我输入我的名字“ Bob”时,我应该看到if语句“ Hey there bro”的消息。但是我看到的是else语句,“哦,鲍勃,你好吗?”。当我输入Emily时也是如此。只看到else语句。

我没有收到任何错误(在Visual Studio中运行此错误),那么我在哪里弄糟呢?

3 个答案:

答案 0 :(得分:4)

为什么不直接与字符串进行比较?

#include <iostream>
#include <string>

int main()
{
  std::string q;
  std::string w;
  std::cout << "Who is this? ";
  std::cin >> q;
  if (q == "Bob") // note the quotation marks around Bob
  {
      std::cout << "Hey there bro. " << std::endl;
  }
  else if (q == "Emily") // note the quotation marks around Emily
  {
      std::cout << "Hi friend :) " << std::endl;
  }
  else
  {
      std::cout << "Oh hey " << q << ", how are you? ";
      std::cin >> w;
      std::cout << "Hey, that's " << w << std::endl;
  }
  return 0;
}

此外,您应避免使用using namespace std,因为它会导致namespace pollution。相反,您可以像上面所做的那样,将std ::放在stringcincoutendl的前面,或者为每个变量包括using语句具体来说就是这样:

using std::string;
using std::cin;
using std::cout;
using std::endl;

答案 1 :(得分:1)

std::string带有自己的operator==,用于比较字符串的内容

string Bob;
string Emily;

好吧,现在您已经创建了两个字符串,都使用默认的构造函数,因此都是 empty 字符串(即它们都将等于"")。

您需要为其分配一个值:

string Bob("Emily");
string Emily("Bob");

我特意给他们分配了逆数!尝试这段代码,您将发现自己是与比较相关的内容,而不是变量名 ...

答案 2 :(得分:1)

您从用户那里获得了string q的值,并将其与string Emilystring Bob进行比较,二者均未分配任何值。

  

我遇到的问题是,当我从powershell运行.exe时,“ if”语句会被完全忽略。

您的if语句不会被忽略,而是将string q与“”进行比较。

您可以给string Bobstring Emily设置初始值:

#include <iostream>
#include <string>

int main()
{
  std::string Bob = "Bob";
  std::string Emily = "Emily";
  std::string q;
}

通过这种方式,您可以比较从cin得到的值到:

#include <iostream>
#include <string>

int main()
{
  std::string Bob = "Bob";
  std::string Emily = "Emily";
  std::string q;

  std::cout<<"What is your name? ";
  std::cin>>q; //Obtain value from cin

  if(q == Emily){}//If q is Emily, then do something
}

您可以详细了解默认变量值herehere.