C++ 我是否可以检查输入的值是c+中的字符串还是整数+;

C++ 我是否可以检查输入的值是c+中的字符串还是整数+;,c++,string,class,integer,cin,C++,String,Class,Integer,Cin,我想检查用户输入的值是字符串还是整数。输入为cin>>obj[i].int\u代码 问题是,如果用户输入任何字符串而不是整数,程序将进入无限循环 #include<iostream> using namespace std; class item{ public: int int_code; string str_name; }; item obj[100]; main(){ int c,i=0,int_cd,n=0,pos=0; do{

我想检查用户输入的值是字符串还是整数。输入为cin>>obj[i].int\u代码

问题是,如果用户输入任何字符串而不是整数,程序将进入无限循环

#include<iostream>
using namespace std;
class item{

public:
    int int_code;
    string str_name;
};
item obj[100];

main(){
    int c,i=0,int_cd,n=0,pos=0;

    do{
        cout<<"\n_______YOUR OPTIONS________\n";
        cout<<"\t1.Add Item\n\t2.View Item\n\t3.Delete Item\n\t4.List Item\n\t5.Exit\n";
        cout<<"Enter your choice: ";
        cin>>c;

        switch(c){
            case 1://Add Item
                cout<<"Enter the item_code: ";

                cin>>obj[i].int_code;

                cout<<"Enter the item_name: ";
                cin>>obj[i].str_name;
                i++;
                n++;
                break;
            case 2://View item
                cout<<"Enter the item_code: ";
                cin>>int_cd;
                for(i = 0;i < n;i++)
                    if(int_cd == obj[i].int_code)
                        cout<<obj[i].int_code<<"\t"<<obj[i].str_name<<"\n";
                break;
            case 3://Delete Item
                cout<<"Enter the item_name: ";
                cin>>int_cd;

                for(i = 0;i < n; i++)
                    if(int_cd==obj[i].int_code)
                        pos=i;

                for(i=pos;i<n;i++){
                    if(obj[i].int_code != NULL)
                        obj[i]=obj[i+1];
                    else
                        obj[i].int_code=NULL;
                        //obj[i].str_name=;
                }
                n--;
                break;
            case 4://list Item
                for(i=0;i<n;i++)
                    cout<<obj[i].int_code<<"\t"<<obj[i].str_name<<"\n";
                break;
            default:
                cout<<"Enter any number between 1 to 5";
                break;
        }
    }while( c != 5 );
}

    enter code here
#包括
使用名称空间std;
类项目{
公众:
int_码;
字符串stru_名称;
};
项目obj[100];
main(){
int c,i=0,int_cd,n=0,pos=0;
做{
不能使用:

string-str;
cin>>str;
int-val;
尝试
{
val=词法转换(str);
}
捕获(const bad\u词法\u cast&)
{
//不是整数
}
使用:

string-str;
cin>>str;
int-val;
尝试
{
val=词法转换(str);
}
捕获(const bad\u词法\u cast&)
{
//不是整数
}

非数字时退出:

#include<iostream>
using namespace std;
class item{

public:
  int int_code;
  string str_name;
};
item obj[100];

main(){
  int c,i=0,int_cd,n=0,pos=0;

  do{
    cout<<"\n_______YOUR OPTIONS________\n";
    cout<<"\t1.Add Item\n\t2.View Item\n\t3.Delete Item\n\t4.List Item\n\t5.Exit\n";
    cout<<"Enter your choice: ";
    cin >> c;
    if (!cin) break;
    switch(c){
    case 1://Add Item
      cout<<"Enter the item_code: ";
      cin>>obj[i].int_code;
      cout<<"Enter the item_name: ";
      cin>>obj[i].str_name;
      i++;
      n++;
      break;
    case 2://View item
      cout<<"Enter the item_code: ";
      cin>>int_cd;
      for(i = 0;i < n;i++)
    if(int_cd == obj[i].int_code)
      cout<<obj[i].int_code<<"\t"<<obj[i].str_name<<"\n";
      break;
    case 3://Delete Item
      cout<<"Enter the item_name: ";
      cin>>int_cd;

      for(i = 0;i < n; i++)
    if(int_cd==obj[i].int_code)
      pos=i;

      for(i=pos;i<n;i++){
    if(obj[i].int_code != 0)
      obj[i]=obj[i+1];
    else
      obj[i].int_code= 0;
    //obj[i].str_name=;
      }
      n--;
      break;
    case 4://list Item
      for(i=0;i<n;i++)
    cout<<obj[i].int_code<<"\t"<<obj[i].str_name<<"\n";
      break;
    default:
      cout<<"Enter any number between 1 to 5";
      break;
    }
  }while( c != 5 );
}
#包括
使用名称空间std;
类项目{
公众:
int_码;
字符串stru_名称;
};
项目obj[100];
main(){
int c,i=0,int_cd,n=0,pos=0;
做{

当不是数字时不能退出:

#include<iostream>
using namespace std;
class item{

public:
  int int_code;
  string str_name;
};
item obj[100];

main(){
  int c,i=0,int_cd,n=0,pos=0;

  do{
    cout<<"\n_______YOUR OPTIONS________\n";
    cout<<"\t1.Add Item\n\t2.View Item\n\t3.Delete Item\n\t4.List Item\n\t5.Exit\n";
    cout<<"Enter your choice: ";
    cin >> c;
    if (!cin) break;
    switch(c){
    case 1://Add Item
      cout<<"Enter the item_code: ";
      cin>>obj[i].int_code;
      cout<<"Enter the item_name: ";
      cin>>obj[i].str_name;
      i++;
      n++;
      break;
    case 2://View item
      cout<<"Enter the item_code: ";
      cin>>int_cd;
      for(i = 0;i < n;i++)
    if(int_cd == obj[i].int_code)
      cout<<obj[i].int_code<<"\t"<<obj[i].str_name<<"\n";
      break;
    case 3://Delete Item
      cout<<"Enter the item_name: ";
      cin>>int_cd;

      for(i = 0;i < n; i++)
    if(int_cd==obj[i].int_code)
      pos=i;

      for(i=pos;i<n;i++){
    if(obj[i].int_code != 0)
      obj[i]=obj[i+1];
    else
      obj[i].int_code= 0;
    //obj[i].str_name=;
      }
      n--;
      break;
    case 4://list Item
      for(i=0;i<n;i++)
    cout<<obj[i].int_code<<"\t"<<obj[i].str_name<<"\n";
      break;
    default:
      cout<<"Enter any number between 1 to 5";
      break;
    }
  }while( c != 5 );
}
#包括
使用名称空间std;
类项目{
公众:
int_码;
字符串stru_名称;
};
项目obj[100];
main(){
int c,i=0,int_cd,n=0,pos=0;
做{
不能改变你的路线吗

cin>>c;

c=-1;
cin>>c;
如果(c<1 | | c>5)
{
不能改变你的路线吗

cin>>c;

c=-1;
cin>>c;
如果(c<1 | | c>5)
{

cout作为
lexical\u cast
的替代方法,您可以执行以下操作:

#include <iostream>
static const int ZERO_ASCII = 48;
static const int MAX_OPTION = 5;
static const int MIN_OPTION = 1;
int main() {
    std::string input;
    std::cin >> input;
    if(input.length() > 1 ){
        std::cout << "Not correct length" << input << std::endl;
        return -1; // in your case use "continue"
    }
    char val = *(input.c_str());
    int intVal = static_cast<int>(val);
    int option = intVal - ZERO_ASCII; // see your printed out ASCII chart :)
    if (MIN_OPTION > option || option > MAX_OPTION) {
        std::cout << "Not valid value " << option << std::endl;
        return -1; // in your case use "continue"
    }
    std::cout << "selected option " << option << std::endl;
}
#包括
静态常量int ZERO_ASCII=48;
静态常数int MAX_选项=5;
静态常量int MIN_选项=1;
int main(){
std::字符串输入;
std::cin>>输入;
if(input.length()>1){

std::cout作为
词法转换的替代方法,您可以执行以下操作:

#include <iostream>
static const int ZERO_ASCII = 48;
static const int MAX_OPTION = 5;
static const int MIN_OPTION = 1;
int main() {
    std::string input;
    std::cin >> input;
    if(input.length() > 1 ){
        std::cout << "Not correct length" << input << std::endl;
        return -1; // in your case use "continue"
    }
    char val = *(input.c_str());
    int intVal = static_cast<int>(val);
    int option = intVal - ZERO_ASCII; // see your printed out ASCII chart :)
    if (MIN_OPTION > option || option > MAX_OPTION) {
        std::cout << "Not valid value " << option << std::endl;
        return -1; // in your case use "continue"
    }
    std::cout << "selected option " << option << std::endl;
}
#包括
静态常量int ZERO_ASCII=48;
静态常数int MAX_选项=5;
静态常量int MIN_选项=1;
int main(){
std::字符串输入;
std::cin>>输入;
if(input.length()>1){
std::cout请注意,“检查输入的值是字符串还是整数”部分在应用程序的多个部分中都是一个问题。即,案例1、2和3都需要整数输入(案例3在下面进一步讨论)。get_int和get_string方法是从中改编而来的。最初我只创建了一个get_int方法;但是,我发现还需要一个get_字符串,否则在“添加项”(案例1)完成后,“输入您的选择”将出现两次,而不是一次

此外,“删除项目”案例3的措词有误,因为请求的是“项目名称”;但是,cin需要的是一个整数,而不是字符串,因此我修改了其中的措辞以及输入方法。我在默认情况下注释掉了cout语句,因为如果前面的案例不适用于输入的值,它现在是多余的。最后,“Delete Item”代码中仍然有一个bug(修复如下)作为删除项目的请求,如果由于pos未重置而仅包含项目,则项目代码2将删除项目代码1

#include <iostream>
#include <limits>
#include <sstream>
#include <string>

using namespace std;

class item
{

    public:
       int int_code;
       string str_name;
};
item obj[100];

string get_string(string message)
{
    string line = "";
    string rs = "";
    cout << message;
    getline(cin, line);
    stringstream ss(line);
    ss >> rs;
    return rs;
}

int get_int(string message)
{
    int ri = -1;
    string line = "";
    bool isint = false;

    while (!isint)
    {
        cout << message;
        getline(cin, line);
        stringstream ss(line);
        if (ss >> ri)
        {
            if (ss.eof())
            {   // Success
                isint = true;
            }
        }
    }
    return ri;
}

int main (int argc, char ** argv)
{
    int c,i=0,int_cd,n=0,pos=0;
    do
    {
        cout<<"\n_______YOUR OPTIONS________\n";
        cout<<"\t1.Add Item\n\t2.View Item\n\t3.Delete Item\n\t4.List Item\n\t5.Exit\n";
        c = get_int("Enter your choice: ");

        switch(c){
            case 1://Add Item
                obj[i].int_code = get_int("Enter the item_code: ");
                obj[i].str_name = get_string("Enter the item_name: ");
                i++;
                n++;
                break;
            case 2://View item
                int_cd  = get_int("Enter the item_code: ");
                for(i = 0;i < n;i++)
                    if(int_cd == obj[i].int_code)
                        cout<<obj[i].int_code<<"\t"<<obj[i].str_name.c_str()<<"\n";
                break;
            case 3://Delete Item
                int_cd  = get_int("Enter the item_code: ");
                pos = -1;
                for(i = 0;i < n; i++)
                    if(int_cd==obj[i].int_code)
                        pos=i;
                // ensure specified item_code is found before deleting an item
                if(pos != -1)
                {
                    for(i=pos;i<n;i++)
                    {
                        if(obj[i].int_code != NULL)
                            obj[i]=obj[i+1];
                        else
                            obj[i].int_code=NULL;
                            //obj[i].str_name=;
                    }
                    n--;
                }
                break;
            case 4://list Item
                for(i=0;i<n;i++)
                    cout<<obj[i].int_code<<"\t"<< obj[i].str_name.c_str() <<"\n";
                break;
            default:
                //cout<< "Enter any number between 1 to 5" << endl;
                break;
        }
    } while( c != 5 );
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
类项目
{
公众:
int_码;
字符串stru_名称;
};
项目obj[100];
字符串获取\u字符串(字符串消息)
{
字符串行=”;
字符串rs=“”;
cout>rs;
返回rs;
}
int get_int(字符串消息)
{
int ri=-1;
字符串行=”;
bool-isint=false;
而(!isint)
{
cout>ri)
{
if(ss.eof())
{//成功
isint=真;
}
}
}
返回ri;
}
int main(int argc,字符**argv)
{
int c,i=0,int_cd,n=0,pos=0;
做
{
cout请注意,“检查输入值是否为字符串或整数”部分是应用程序多个部分中的一个问题。即,情况1、2和3都需要整数输入(下面将进一步讨论情况3)。get_int和get_string方法是从中改编而来的。最初我只创建了一个get_int方法;但是,我发现还需要一个get_字符串,否则在“添加项”(案例1)完成后,“输入您的选择”将出现两次,而不是一次

此外,“删除项目”案例3的措词有误,因为请求的是“项目名称”;但是,cin需要的是一个整数,而不是字符串,因此我修改了其中的措辞以及输入方法。我在默认情况下注释掉了cout语句,因为如果前面的案例不适用于输入的值,它现在是多余的。最后,“Delete Item”代码中仍然有一个bug(修复如下)作为删除项目的请求,如果由于pos未重置而仅包含项目,则项目代码2将删除项目代码1

#include <iostream>
#include <limits>
#include <sstream>
#include <string>

using namespace std;

class item
{

    public:
       int int_code;
       string str_name;
};
item obj[100];

string get_string(string message)
{
    string line = "";
    string rs = "";
    cout << message;
    getline(cin, line);
    stringstream ss(line);
    ss >> rs;
    return rs;
}

int get_int(string message)
{
    int ri = -1;
    string line = "";
    bool isint = false;

    while (!isint)
    {
        cout << message;
        getline(cin, line);
        stringstream ss(line);
        if (ss >> ri)
        {
            if (ss.eof())
            {   // Success
                isint = true;
            }
        }
    }
    return ri;
}

int main (int argc, char ** argv)
{
    int c,i=0,int_cd,n=0,pos=0;
    do
    {
        cout<<"\n_______YOUR OPTIONS________\n";
        cout<<"\t1.Add Item\n\t2.View Item\n\t3.Delete Item\n\t4.List Item\n\t5.Exit\n";
        c = get_int("Enter your choice: ");

        switch(c){
            case 1://Add Item
                obj[i].int_code = get_int("Enter the item_code: ");
                obj[i].str_name = get_string("Enter the item_name: ");
                i++;
                n++;
                break;
            case 2://View item
                int_cd  = get_int("Enter the item_code: ");
                for(i = 0;i < n;i++)
                    if(int_cd == obj[i].int_code)
                        cout<<obj[i].int_code<<"\t"<<obj[i].str_name.c_str()<<"\n";
                break;
            case 3://Delete Item
                int_cd  = get_int("Enter the item_code: ");
                pos = -1;
                for(i = 0;i < n; i++)
                    if(int_cd==obj[i].int_code)
                        pos=i;
                // ensure specified item_code is found before deleting an item
                if(pos != -1)
                {
                    for(i=pos;i<n;i++)
                    {
                        if(obj[i].int_code != NULL)
                            obj[i]=obj[i+1];
                        else
                            obj[i].int_code=NULL;
                            //obj[i].str_name=;
                    }
                    n--;
                }
                break;
            case 4://list Item
                for(i=0;i<n;i++)
                    cout<<obj[i].int_code<<"\t"<< obj[i].str_name.c_str() <<"\n";
                break;
            default:
                //cout<< "Enter any number between 1 to 5" << endl;
                break;
        }
    } while( c != 5 );
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
类项目
{
公众:
int_码;
字符串stru_名称;
};
项目obj[100];
字符串获取\u字符串(字符串消息)
{
字符串行=”;
字符串rs=“”;
cout>rs;
返回rs;
}
int get_int(字符串消息)
{
int ri=-1;
字符串行=”;
bool-isint=false;
而(!isint)
{
cout>ri)
{
if(ss.eof())
{//成功
isint=真;
}
}
}
返回ri;
}
int main(int argc,字符**argv)
{
int c,i=0,int_cd,n=0,pos=0;
做
{

cout+1我有很多时间做词法转换。它读起来比较快,也很可爱。问题是你需要
try…catch
块。你真的想要一个能让你用一个简单的
if
@JamesKanze检查错误的东西。你可以把
try..catch
块埋在
bool int\u ca这样的函数中st(const string&,int&)
#include.给出错误“没有这样的文件或目录”!。我在问有没有简单的方法。通过任何简单的逻辑??)@RaziKallayi是的,并且使用命名空间boost<