C++ 我是否可以检查输入的值是c+中的字符串还是整数+;
我想检查用户输入的值是字符串还是整数。输入为cin>>obj[i].int\u代码代码中的strong> 问题是,如果用户输入任何字符串而不是整数,程序将进入无限循环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{
#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<