2014-02-08 4 views
0

Я использую cin двумя разными способами: в одном случае я просто использую переменную cin (overloaded) >>, а с другой стороны я использую функцию read, которая принимает istream.Проблемы с cin

код у меня есть для этого есть:

cin >> string6; 
cout << string6; 
string7.read(cin); 
cout << string7; 

Проблема я думаю, что я имею имею что то, что осталось в КИН string6 используется для String7 (если я прочитал в «Hello» и а затем^D^D, чтобы обозначить конец ввода, я уверен, что^D читается в string7), поэтому я не могу прочитать ввод пользователя с помощью string7.read(). Как исправить эту проблему?

EDIT: string6/string7 являются переменными моего класса String(), а read является функцией-членом строки.

+0

Возможно, вам нужно ['std :: getline()'] (http://www.cplusplus.com/reference/string/string/getline/) вместо 'string7.read()'? – user3159253

+0

Не могу этого сделать, я должен использовать read(). –

+0

read() не является членом std :: string, какую строку вы используете? – Gibby

ответ

0

Я не имею код, так что я не могу проверить это, но это может работать:

istream& ignore (streamsize n = 1, int delim = EOF); 

извлекает символы из входной последовательности и отбрасывает их.

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
0

"cin >>" будет читать до следующего символа новой строки. Вы можете использовать cin.ignore() для удаления символов. Вы также можете использовать cin.peek(), чтобы проверить, что сейчас находится в передней части потока.

Так,

if(cin.peek() == '^D') 
{ 
    cin.ignore(); 
} 

Замена '^ D' с фактическим кодом. Вы также можете просто сделать что-то вроде

while(!isalpha(cin.peek())) 
{ 
    cin.ignore(); 
} 

, чтобы гарантировать, что cin начинается с альфа-символа.

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