c++验证用户输入合法性的示例代码

c++验证用户输入合法性的示例代码

本文介绍c++验证用户输入合法性,用于检测限定用户输入值。包括:1、限定用户输入为整数(正负整数);2、限定用户输入为正整数;3、限定用户输入为正数(可以含有小数);4、限定用户输入为一个数;5、限定只能输入为英语字母。

提示:下面程序,需要编译器支持c++11标准。

【若你使用Dev-C++,需要设置:打开“工具[T]→编译选项[C]”菜单,添加 -std=c++11,然后按“确定”按钮生效。参见下图红圈处:

1、限定用户输入为整数

可以是正负整数,提供有几种方式的源码,供选用

源码1

#include <iostream>
using namespace std;
//判断输入的字符串是否为整数,直至合规才返归其值
int judge(int temp)
{      
	//对输入的合法性进行判断并返回有效的输入
	//int temp;
	cin.sync();    //清空输入流缓冲区
	cin>>temp;
	while(1)
	{
		if(cin.fail()||cin.bad()||cin.get()!='\n')    //验证输入是否合法,其中cin.fail()和cin.bad()解决输入字符串和溢出的问题
			cout<<"错误!请重新输入:"<<endl;    //cin.get()检查输入流中是否还有字符(如果有就表示输入的是形如123r或12.3的错误
		else break;      //输入合法则跳出循环
		cin.clear();    //清空输入流缓冲区标志位,以免影响下次输入
		cin.sync();     
		cin>>temp;
	}
	return temp;
}

int main()
{
	cout<<"请输入整数:"<<endl;
	int a;	
	cout<<"合规的输入:"<<judge(a)<<endl;
	return 0;
}

运行效果如下:

源码2

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//是整数返回1,否则返回0 
bool isNumber3(const string& str)
{
    return str.find_first_not_of( "-0123456789" ) == string::npos &&
        str.front() != '.' && str.back() != '.';
}

int main(){
    string str;
    cout<<"请输入整数:"<<endl;
	cin>>str;
    while(!isNumber3(str)){
		cout<<"请输入整数,不要输入字母:"<<endl;
		cin>>str;
	}
    cout <<"合规输入:"<<str<<endl;
   
    //exit(EXIT_SUCCESS);
    return 0; 
}

运行效果如下:

2、限定用户输入为正整数

提供有几种方式的源码,供选用

源码1

#include <iostream>
#include<string>
using namespace std;
//判断输入的字符串是否为正整数,若是,则合规返归其值 ,否则给出提示继续 
int CheckNum(int& n)
{
    int i;
    string x;  //用来接受输入
    bool flag = false;
    while (cin >> x) {
        for (i = 0; i < x.size(); ++i) {
       		 //判断是否为中文
            if (x[i] & 0x80) {
                cout << "\n输入错误,请重新输入正确的数字: ";
                break;
            }
            //判断是否为字母或者其它字符
            if (!isdigit(x[i])) {
                cout << "\n输入错误,请重新输入正确的数字: ";
                break;
            }
        }
        if (i == x.size()) {
            break;   //如果字符串中所有字符都合法,则退出while循环
        }
    }
    n = atoi(x.c_str()); //将string字符串转化为整数
    return n;    
}

int main()
{
    int m,n;
    while (true) {
        cout << "请输入正整数:";
        n=CheckNum(m);
        cout <<"合规输入:"<<n<<endl;
        break;  //退出循环 		
    }
}

运行效果如下:

源码2

#include<iostream>
#include<algorithm>
#include<cstring> 
#include<stdlib.h>  //为了使用 c_str() 函数 
using namespace std;
//将string转为char数组并判断输入是否为正整数
int check1(string s){
	char a[s.length()];
	strcpy(a,s.c_str());
	int i; 
	for(i = 0;i<s.length();i++){
		//如果不是数字
		if(!isdigit(a[i])){
			return -1; 
		}
	}
	return 0; 
}

//string 转 int
int s2i(string s)
{
	return atoi( s.c_str() );
}

int main()
{
    string n0;//判断用户输入用
	int n;//真正存储的变量
    cout<<"请输入:"<<endl;
    cin>>n0;
    //判断输入的n0是否符合要求
	while(check1(n0)){
		cout<<"请输入正整数,不要输入负数或者小数或字母:"<<endl;
		cin>>n0;
	}
    n = s2i(n0);//string转为int存储 
    cout <<"合规输入:"<<n<<endl;

}

运行效果如下:

源码3

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//是正整数返回1,否则返回0 
bool isNumber(const string& str)
{
    return !str.empty() &&
        find_if(str.begin(), str.end(),
            [](unsigned char c) { return !isdigit(c); }) == str.end();
}

int main(){
    
    string str;
    cout<<"请输入正数:"<<endl;
	cin>>str;
    while(!isNumber(str)){
		cout<<"请输入正整数,不要输入负数或者小数或字母:"<<endl;
		cin>>str;
	}
    cout <<"合规输入:"<<str<<endl;
   
    //exit(EXIT_SUCCESS);
    return 0; 
}

运行效果如下:

3、限定用户输入为正数

可以含有小数

源码1

#include<iostream>
#include<algorithm>
#include<cstring> 
#include<stdlib.h>  //为了使用 c_str() 函数 
using namespace std;
//将string转为char数组并判断输入是否为正数
int check2(string s){
	char a[s.length()];
	strcpy(a,s.c_str());
	int i; 
	for(i = 0;i<s.length();i++){
		//如果不是数字且不是小数点 
		if((!isdigit(a[i])) && (a[i]!='.')){
			return -1; 
		}
	}
	return 0; 
}

//string 转 double
double s2d(string s)
{
	return atof( s.c_str() );
}

int main(){
	string n0;//判断用户输入用
	double n;//真正存储的变量
    cout<<"请输入正数:"<<endl;
    cin>>n0;
    //判断输入的n0是否符合要求
	while(check2(n0)){
		cout<<"请输入正数,不要输入负数或字母:"<<endl;
		cin>>n0;
	}
    n = s2d(n0);//string转为double存储 
    cout <<"合规输入:"<<n<<endl;
}

运行效果如下:

源码2

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//是正数返回1,否则返回0 
bool isNumber3(const string& str)
{
    return str.find_first_not_of( ".0123456789" ) == string::npos &&
        str.front() != '.' && str.back() != '.';
}

int main(){
    string str;
    cout<<"请输入正数:"<<endl;
	cin>>str;
    while(!isNumber3(str)){
		cout<<"请输入正数,不要输入负数或字母:"<<endl;
		cin>>str;
	}
    cout <<"合规输入:"<<str<<endl;   
    return 0; 
}

运行效果如下:

4、限定用户输入为一个数

包括正负整数、正负小数,但不能含有字母

源码如下

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//是数返回1,否则返回0 
bool isNumber3(const string& str)
{
    return str.find_first_not_of( "+-.0123456789" ) == string::npos &&
        str.front() != '.' && str.back() != '.';
}

int main(){
    string str;
    cout<<"请输入数:"<<endl;
	cin>>str;
    while(!isNumber3(str)){
		cout<<"请输入数,不要输入字母:"<<endl;
		cin>>str;
	}
    cout <<"合规输入:"<<str<<endl;
   
    //exit(EXIT_SUCCESS);
    return 0; 
}

运行效果如下:

5、限定只能输入为英语字母

源码如下

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//是英语字母返回1,否则返回0 
bool isNumber3(const string& str)
{
    return str.find_first_not_of( "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" ) == string::npos &&
        str.front() != '.' && str.back() != '.';
}

int main(){
    string str;
    cout<<"请输入英语字母:"<<endl;
	cin>>str;
    while(!isNumber3(str)){
		cout<<"请输英语字母:"<<endl;
		cin>>str;
	}
    cout <<"合规输入:"<<str<<endl;
   
    //exit(EXIT_SUCCESS);
    return 0; 
}

运行效果如下:

OK!

参考 
https://www.jiyik.com/tm/xwzj/prolan_3518.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值