2015-10-13 4 views
0

У меня есть следующий код:Игнорирование запятые в C++ CIN

float x1 = 0,x2 = 0,y1 = 0,y2 = 0; 
cout << "Enter coordinates as \"(x1,y1) (x2,y2)\"\n"; 
cin >> x1; 
cin.ignore(1, ','); 
cin >> y1; 
cin >> x2; 
cin.ignore(1, ','); 
cin >> y2; 
cout << "Coordinates registered as (" << x1 << "," << y1 << "), (" << x2 << "," << y2 << ").\n"; 

Но это всегда возвращает (0,0) (0,0).

Какова будет правильная реализация cin.ignore?

+4

Вы не едите круглые скобки. – NathanOliver

+0

Если вы не знаете, как использовать функцию в пространстве имен std (или что-нибудь с документацией), найдите ссылку: http://www.cplusplus.com/reference/istream/istream/ignore/ – NineToeNerd

ответ

3

Если вы в буквальном смысле ввода в данных в виде (x1,y1) (x2,y2) как

(10,20) (30,40) 

Тогда вы будете должны потреблять скобку, а также запятые. Простой способ сделать это, чтобы объявить переменную обугленного и использовать, чтобы получить отдельные символы, которые должны быть удалены

float x1 = 0,x2 = 0,y1 = 0,y2 = 0; 
char eater; 
std::cout << "Enter coordinates as \"(x1,y1) (x2,y2)\"\n"; 
std::cin >> eater; // removes (
std::cin >> x1; 
std::cin >> eater; // removes , 
std::cin >> y1; 
std::cin >> eater; //removes) 
std::cin >> eater; // removes (
std::cin >> x2; 
std::cin >> eater; // removes , 
std::cin >> y2; 
std::cin >> eater; //removes) 

Чтобы сделать его немного более компактный, вы можете получить один координате в каждой строке, как

float x1 = 0,x2 = 0,y1 = 0,y2 = 0; 
char eater; 
std::cout << "Enter coordinates as \"(x1,y1) (x2,y2)\"\n"; 
std::cin >> eater >> x1 >> eater >> y1 >> eater; 
//   (    ,    ) 
std::cin >> eater >> x2 >> eater >> y2 >> eater; 
//   (    ,    ) 

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