Вывод строки выдает ошибку и затрудняет понимание, помогите, пожалуйста?

#c #string #cout #cin

#c #строка #cout #cin

Вопрос:

Я не могу найти ошибку в этом фрагменте кода, может кто-нибудь, пожалуйста, разъяснить мне? Я запустил отладку, но ошибки непонятны..

 #include "stdafx.h"
#include <iostream>

using namespace std;

int main() 
{ 
  string name; 
  cout << "Input your name please?" << endl; 
  cin >> name; 

  if
      {
          (name == "Bart Simpson")  
    cout << "You have been very naughty" << endl; 
  }
return 0;
}
  

Комментарии:

1. Это ваш реальный код, или вы допустили ошибку при публикации?

2. В будущем, на самом деле, публикуйте свои ошибки, не просто упоминайте, что у вас есть некоторые.

Ответ №1:

Проблемы:

  1. У вас есть некоторые недостающие #include s, которые, вероятно, вызвали ваши первоначальные ошибки компилятора.
  2. У вас простая синтаксическая ошибка в вашем if заявлении.
  3. Использование оператора извлечения потока никогда не выдаст строку с пробелом внутри нее.

Следующее должно работать так, как вы ожидаете:

 #include "stdafx.h"
#include <iostream>
#include <ostream>
#include <string>

using namespace std;

int main()
{
    cout << "Input your name please?" << endl;

    string name;
    getline(cin, name);
    if (name == "Bart Simpson")
    {
        cout << "You have been very naughty" << endl;
    }

    return 0;
}
  

(Вам нужно включить string для std::string и std::getline , и ostream для std::endl .)

Комментарии:

1. За исключением того, что name никогда не может быть Bart Simpson

2. @JohnDibling почему имя никогда не может быть Барт Симпсон? (Я попробовал это, и действительно, я получил ошибку, но когда я попробовал Bart, это сработало)

3. @Sinner : Оператор извлечения потока ( operator>> в данном контексте) останавливает извлечение, как только встречает пробел или EOF, поэтому вы не можете использовать его для извлечения строки с пробелом внутри. Используйте std::getline вместо этого.

Ответ №2:

Я предполагаю, что скобка в неправильном месте — это просто проблема при вставке кода

если (имя == «Барт Симпсон»)

name никогда не будет равно "Bart Simpson" , поскольку извлечение string останавливается, когда встречается пробел; так что это было бы только "Bart" . Возможно, вы хотите использовать getline() вместо этого?

Ответ №3:

Должно быть

 if (name == "Bart Simpson")
{
    cout << "You have been very naughty" << endl;
}
  

И вам нужно включить <string>