Удалять пробелы из входного потока только с помощью функций istream

Есть ли способ убрать завершающие пробелы после ввода десятичного числа?
Например.:

10        A

Я хочу поймать первый символ после окончания пробела. (Что должно быть \ n, чтобы быть правдой. Если нет, то ложь

Моя попытка пока:

cout << "Please enter a number: ";
cin >> n;

if (cin.peek() == ' ')
//Something to catch the whitespaces

if(cin.fail() || cin.peek() != '\n')
cout << "Not a number." << endl;

else
cout << "A number." << endl;

Можно ли это сделать с помощью функций в istream?

(Я знаю, что cin.fail может делать добрые дела, но он по-прежнему не считает ввод 10А неудачным)

0

Решение

Как сказал @chris, вы действительно хотите начать с прочтения целой строки, а затем делать оставшуюся часть чтения оттуда.

std::string line;
std::getline(cin, line);

std::stringstream buffer(line);

buffer >> n;

char ch;
if (buffer >> ch)
cout << "Not a number";
1

Другие решения

Я немного смущен тем, что ты пытаешься сделать. Вы говорите, что пытаетесь избежать пробелов?

cin пропускает эти … это действительный пустой разделитель, такой как tab или newline. Если вы делаете:

int A(0), B(0);

std::cin >> A >> B;

введенные числа будут идти в A, пока вы не введете пробел, а затем они будут идти в B.

Если вы используете строки и хотите объединить их в одну без пробелов;

std::string A, B, C;
std::string final;

std::cin >> A >> B >> C;

std::stringstream ss;
ss << A << B << C;
final = ss.str();

Однако, как упоминал Джерри, если вы имеете дело со строками, вы можете просто выполнить std :: getline (), что даст вам, возможно, меньше головной боли.

1

Спасибо за вашу помощь.
Со строками это будет легко да. Хотя не разрешено его использовать.

Может быть сделано этим простым методом:

cout << "Please enter a number: ";
cin >> n;

while (cin.peek() == ' ')
cin.ignore(1,' ');

if(cin.fail() || cin.peek() != '\n')
cout << "Not a number." << endl;

else
cout << "A number." << endl;
0
По вопросам рекламы [email protected]