у меня проблема с проверкой, является ли ввод строкой или числом

#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
}