2013-12-22 3 views
-1

Может кто-нибудь сказать мне, что не так с этим. Когда я ввожу «Как ты», он не отвечает «Я в порядке».! Пожалуйста помоги!!!C++. Что не так с моей программой «привет мир»?

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

int main() 
{ 
    string x; 

    cout << "Write something.." << endl; 
    cin >> x; 

    if (x == "How are you?") { 
     cout << "I am fine." << endl; 
    } 

    system("PAUSE"); 
} 
+0

Пробовали ли вы печать х, чтобы увидеть, что это? –

+6

Конечно, нет. Вы сказали, что он должен что-то напечатать, если вы введете «Как дела?». «Как вы» - это другая строка. – hvd

+1

Я не хочу быть грубым, но почему бы вам закончить вопрос без вопросительного знака, когда вы ожидаете ответа. – uSeRnAmEhAhAhAhAhA

ответ

8

Использование std::getline получение линии. Причина std::cin>> получит только первое слово.

Фиксированный код будет таким:

cout << "Write something.." << endl; 
std::getline (std::cin,x); 

if (x == "How are you?"){ 
    cout << "I am fine." << endl; 
} 
3

Прежде всего, может быть, вы должны вход Как вы? вместо Как вы,, чтобы он реагировал так же, как и то, что вы хотите проверить в коде. Ah, hah :)

Другое дело, также более серьезная вещь заключается в том, что вы должны использовать std::getline(), чтобы получить ввод вместо std::cin>>, поскольку последний получит только первое слово.

1

Программа не сознает. Если вы с жестким кодом «Как дела?» в свою программу, лучше всего, если только ваша программа не была в неисправном состоянии, она ожидает «Как дела?». Вы можете облегчить эти ограничения, выполнив сравнение без учета регистра (или преобразование строки в нижний регистр) или разрешив исключение вопросительного знака (но тогда это не вопрос, не так ли?)

Для того, чтобы читать всю строку, вам нужно использовать getline. В противном случае cin будет извлекать только первое слово (вплоть до пробела).

std::getline(std::cin, x); 
0

Вы читаете только одно слово, используя этот синтаксис.

для отладки, печать, что вы читаете ...

Правильный метод для чтения строки является:

getline(cin, x);

Я уверен, что GetLine не возвращает символ новой строки, но если он не работает, проверьте это.

+1

'std :: getline' извлекает новую строку, но не включает ее в строку. – chris

0

использование зЬгстр для сравнения строк

STRCMP() возвращает 0, если обе строки одинаковы

 returns 1;returns 1 if they are different 

    int strcmp (const char * str1, const char * str2); 
+0

OP использует 'std :: string', поэтому здесь нет необходимости использовать сравнения строк в стиле C. C++ ' 'предоставляет соответствующее переопределение для' operator ==() ', которое сравнивает' std :: string' с 'const char *'. –

1

Попробуйте что-то вроде этого -

$ cat hello.cc 
#include <iostream> 
#include <string> 

int main() { 
    using namespace std; 
    string x; 

    cout << "Write something.." << endl; 
    getline(cin, x); 
    if (x == "How are you?") { 
    cout << "I am fine." << endl; 
    } 
} 
$ g++ hello.cc 
$ ./a.out 
Write something.. 
How are you? 
I am fine. 
$ 
+0

Спасибо, что сработало для меня. – Anonymous

+0

Как использовать этот ввод в инструкции switch вместо if ??? – Anonymous

+0

@ user2998832 Задайте другой вопрос и примите ответ на этот вопрос. –

Смежные вопросы