2013-03-09 3 views
2

Как добиться следующего в C++ с помощью cin?Форматирование ввода/вывода в C++

scanf("%d:%d:%d",&day,&month,&year); 

Кроме того, как проверить Wheter вход это число, символ или поплавок, как, скажем, если у меня есть строка, как scanf("%d",&a);, если пользователь вводит символ, то как я могу остановить его и предложит пользователю для получения правильный ввод.

+0

, вероятно, поможет: http://www.parashift.com/c++-faq/istream-and-ignore.html – chris

ответ

2

Примечание: Следующая неопробованные:

unsigned int day; 
unsigned int month; 
unsigned int year; 
cin >> day; 
cin.ignore(20,':'); // Ignore everything up to and including the ':'. 
cin >> month; 
cin.ignore(20, ':'); 
cin >> year; 

Также смотрите в "skipws". Использование skipws вы можете быть в состоянии поставить все на одной линии:

char colon; 
cin >> day >> colon >> month >> colon >> year; 
-3

Its так просто, как это:

cin >> day >> month >> year; 

Приветствие :)

+0

Это не работает Я попробовал это, прежде чем публиковать свой вопрос. Я использую Dev C++. – Ravitheja

+0

Вы не можете ввести литерал. – chris

+0

Этот ответ даже не компилируется. Кто, где избиратель? –

4

Я бы, наверное, читал во всей линии, или, возможно, в этом случае просто пробел разделителя строки, а затем разобрать его sscanf ... Если вы знакомы с sscanf, ничего плохого с небольшим #include <cstring>, он является стандарт в конце концов ...

string datestr; 
cin >> datestr; 
int result = sscanf(datestr.c_str(), " %d:%d:%d", &day, &month, &year); 

Для более C++-решения, Boost has something, хотя я сам этого не использовал.

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