2013-07-22 2 views
2

Я новичок в C++, и у меня очень плохое время с классами и объектами. Я не могу найти способ заставить пользователя вводить данные, а не только некоторые cout < < «..»; от меня. Мне нужно понимать классы и объекты. Я бы очень признателен вам за вашу помощь. Я искал форум для подобного вопроса, и я ничего не нашел, если я пропустил его, мне очень жаль.C++ Классы + объекты и пользовательский интерфейс

#include <iostream> 
#include <string> 

using namespace std; 

class ManosClass{ 
public: 
    string name; 
}; 

int main() 
{ 
    ManosClass co; 
    co.name =   //i want here the user to enter his name for example and i can't figure a way to do this 
    cout << co.name; 
    return 0; 
} 

ответ

2

Для чтения пользовательского ввода, вы ищете увидеть std::getline или использовать std::cin

std::getline(std::cin, co.name); 

или

std::cin >> co.name; 
+0

спасибо большое – valkon

+0

@valkongr вы можете, рад, что это помогло. – billz

2

cout отправляет вещи. cin отправляет вещи в Это может помочь:.

cin >> co.name; 
+0

jesus было так просто! Спасибо! Большое спасибо – valkon

1

Рассмотрим версию getline(), которая проживает в <string>, если вы не хотите, чтобы предположить, что имя человека отделяется пробелами. Некоторые имена содержат более одного слова. Его также менее неуклюжий, чем cin.getline(), поскольку вам не нужно указывать заранее максимальную длину чьего-либо имени.

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

int main() 
{ 
    string strName; 
    getline(cin, strName); //Will read up until enter is pressed 
    //cin >> strName //will only return the first white space separated token 
    //Do whatever you want with strName. 
} 

Edit: Модифицированная для использования оригинальных классов

#include <iostream> 
#include <string> 

using namespace std; 

class ManosClass{ 
public: 
    string name; //You might want to look at rather not using public data in a class 
}; 

int main() 
{ 
    ManosClass co; 
    getline(cin, co.name); 
    cout << co.name; 
    return 0; 
} 

Альтернатива: перегрузка операторов

#include <iostream> 
#include <string> 

using namespace std; 

class ManosClass{ 
public: 
    friend ostream& operator<<(ostream& out, const ManosClass& o); 
    friend istream& operator>>(istream& in, ManosClass& o); 
private: 
    string name; //Hidden from prying eyes 
}; 

ostream& operator<<(ostream& out, const ManosClass& o) 
{ 
    out << o.name; 
    return out; 
} 

istream& operator>>(istream& in, ManosClass& o) 
{ 
    getline(in, o.name); 
    return in; 
} 

int main() 
{ 
    ManosClass co; 
    cin >> co; //Now co can be used with the stream operators 
    cout << co; 
    return 0; 
} 
+0

Это работает, но поправьте меня, пожалуйста, если я ошибаюсь, это не класс – valkon

+1

Вы правы, я изменю ответ, чтобы использовать ваш класс. – DuncanACoulter

+0

спасибо! Я знаю, что мне нужно научиться пользоваться частными классами. Большое вам спасибо! я должен дать понять, как работать с частными классами .. действительно запутывает – valkon

2

COUT выводится. cin используется для ввода.

cin >> co.name 

введите значение в co.name

+0

спасибо вам также! но у меня проблема, поэтому, когда я ввожу два слова или более, результат - это только первое слово, но с этой командой std :: getline (std :: cin, co.name); я не сталкиваюсь с этой проблемой – valkon

+1

getline работает по-разному. проверить эту ссылку http://www.cplusplus.com/reference/string/string/getline/ – blitz

+1

большое вам спасибо! – valkon

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