2013-09-29 19 views
1

Моя программа должна выводить First Middle Last name и игнорировать, то есть на входе. Но в моей программе запятая все еще в моем представлении, поэтому, очевидно, что я что-то упускаю.cin.ignore() не работает в программе

#include <iostream> 
#include <string> 
using namespace std; 
char chr; 
int main() 
{ 
string last, first, middle; 
cout<< "Enter in this format your Last name comma First name Middle name."<<endl; //Input full name in required format 
cin>>last;                   //receiving the input Last name 
cin>>first;                   //receiving the input First name 
cin>>middle;                  //receiving the input Middle name 
cout<<first<<" "<<middle<< " " <<last;            //Displaying the inputed information in the format First Middle Last name 
cin.ignore(',');                 //ignoring the , that is not neccesary for the new format 
cin>>chr; 

return 0; 
} 
+0

вы принимаете имена от cin перед тем, как игнорировать запятую? –

+0

также я не думаю, что вы хотите cin.ignore –

+2

Можете ли вы объяснить, что вы ожидаете от этого? Похоже, ваш 'cin.ignore (',')' находится в неправильном месте [и с неправильными аргументами]. –

ответ

0

Вы можете выбрать запятые из потока:

std::istream& comma(std::istream& in) 
{ 
    if ((in >> std::ws).peek() == ',') 
     in.ignore(); 
    else 
     in.setstate(std::ios_base::failbit); 
    return in; 
} 

int main() 
{ 
    string last, first, middle; 

    cin >> last >> comma >> first >> comma >> middle; 

    cout << first << " " << middle << " " << last; 
} 
2

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

Итак, у вас есть это, cin.ignore(','); будет игнорировать 44 символа до тех пор, пока вы не напечатаете введенные входы. Это почти наверняка НЕ ​​то, что вы хотели сделать.

Если вы хотите пропустить запятую, вы должны будете позвонить cin.ignore(100, ','); между вводом имени и ввода имени. Это приведет к следующей запятой на входе (до 100 символов).

+0

Я попытался изменить cin.ignore (','); to cin.ignore (100, ','); и помещая его между cinlast, и сначала я также помещал его в несколько других мест, и это просто заставляет мой вывод не появляться. Предполагается, что моя программа будет вводить имя пользователя в формате Last, first middle, а затем выводить первую середину последней запятой. –

+0

Я послал своего инструктора для помощи с моим cin.ignore, и это то, что она передала мне. Проблема в том, что когда вы читаете в последнем - это включает запятую. Таким образом, для вашего cin.ignore требуется 2 аргумента, 100, \ n. В этом случае вам не нужен cin.ignore. Просто прочитайте сначала, а затем в середине. Затем используйте строковые функции, чтобы «найти» запятую и создать подстроку от последнего начала в позиции 0 до места перед запятой. Проблема в том, что я понятия не имею, о чем она говорит. Я знаю, как включить функцию поиска, но вторую часть, которую я не получаю. –

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