#c #string #integer
#c #строка #целое число
Вопрос:
пытаюсь выяснить: если пользователь вводит строку или число, но при попытке ввести число он просто вводит цикл inifiti и просто печатает «введите свое имя», и я хочу, чтобы это была строка после входа в цикл, чтобы просто выйти из цикла.
#include <iostream>
#include<sstream>
#include<cmath>
#include<iomanip>
using namespace std;
main()
{
string name;
cout<<"enter your name :";
cin>>name;
stringstream s;
int x;
s<<name;
s>>x;
while(x!=0)
{
cout<<"enter your name :";
cin>>name;
s<<name;
s>>x;
}
return 0;
}
Ответ №1:
Если поток не может проанализировать требуемый ввод в переменную, он установит внутренний флаг fail .
Этот флаг можно проверить, используя поток в условии.
И оператор извлечения возвращает ссылку на поток.
Вместе вы можете сделать что-то вроде
while (s >> x)
{
// String starts with a number...
s.clear(); // Clear fail state flag
// TODO: Ask for new input, set contents of s
}