Есть ли способ убрать завершающие пробелы после ввода десятичного числа?
Например.:
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А неудачным)
Как сказал @chris, вы действительно хотите начать с прочтения целой строки, а затем делать оставшуюся часть чтения оттуда.
std::string line;
std::getline(cin, line);
std::stringstream buffer(line);
buffer >> n;
char ch;
if (buffer >> ch)
cout << "Not a number";
Я немного смущен тем, что ты пытаешься сделать. Вы говорите, что пытаетесь избежать пробелов?
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 (), что даст вам, возможно, меньше головной боли.
Спасибо за вашу помощь.
Со строками это будет легко да. Хотя не разрешено его использовать.
Может быть сделано этим простым методом:
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;