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

news2024/12/25 22:22:59

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI算力碎片化:矩阵乘法的启示

尽管AI的发展取得了巨大进步&#xff0c;但编译器LLVM之父Chris Lattner认为&#xff0c;AI技术应用并不深入&#xff0c;远远没有发挥出已有机器学习研究的所有潜力。而AI系统和工具的单一化和碎片化正是造成这一问题的根源。 为了让AI发挥其真正的潜力&#xff0c;计算碎片化…

Oracle中实现恢复删除的表或表数据内容

一、需求说明 在我们进行项目开发或运维过程中,由于操作不当,引起的误删Oracle数据库表或指定表的数据内容,导致程序出现故障;而我们又没有对数据库进行备份,此时,如果不能及时恢复数据库内容将会导致严重的事故。我们需要一种能够补救的方法来挽回损失,恢复被误删的表或…

WEB攻防-弱口令暴力破解(包含工具、字典下载地址)

目录 一、弱口令概述 二、Web类-加密&验证码后台猜解 三、服务类-SSH&RDP远程终端猜解 四、应用类-ZIP&Word文件压缩包猜解 一、弱口令概述 弱口令(weak password) 没有严格和准确的定义&#xff0c;通常认为容易被别人&#xff08;他们有可能 对你很了解&#…

025:Mapbox GL加载栅格高程模型raster-dem文件

第025个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载image图像文件。栅格 DEM 源。 仅支持 Mapbox Terrain-DEM,您可以将 Terrain-DEM 用于各种视觉和分析应用程序,从样式化地形坡度和山体阴影到为视频游戏生成 3D 地形网格。 直接复制下面的 vue+mapbo…

记录一个dpdk 19.11 hello world 跑不起来问题(编译和权限)

下载dpdk 源码后: git clone gitgithub.com:DPDK/dpdk.git 切到 19.11 git checkout v19.11 用usertool下的dpdk_setup.sh 选择 [38] x86_64-native-linuxapp-gcc 进行编译: 结果者是build 不过: Build kernel/linux/igb_uio Build kernel/linux/kni CC [M] /home/t…

Linux查看GPU信息和使用情况

1.Linux查看显卡信息 lspci | grep -i vga 2.使用nvidia GPU lspci | grep -i nvidia 个人感觉看不出什么信息&#xff0c;除了显存大小&#xff0c;另外就是可以通过加入前面的显卡编号&#xff0c;显示更加详细的信息。 lspci -v -s 00:0f.0 3.Linux查看Nvidia显卡信息及使…

软件测试之学习测试用例的设计(等价类法、边界值法、错误猜测法、场景法、因果图法、正交法)

文章目录 1. 测试用例的概念2. 为什么在测试前要设计测试用例3. 基于需求进行测试用例的设计1&#xff09;功能性需求测试2&#xff09;非功能性需求测试 4. 具体的测试用例设计方法1&#xff09;等价类2&#xff09;边界值3&#xff09;错误猜测法4&#xff09;场景法5&#x…

Python入门教程+项目实战-11.1节: 元组的基础概念

目录 11.1.1 理解元组类型 11.1.2 元组的类型名 11.1.3 元组的定义 11.1.4 元组的解包 11.1.5 遍历可迭代对象 11.1.6 本节知识要点 11.1.7 系统学习python 11.1.1 理解元组类型 元组与列表有着相同的数据结构&#xff0c;区别在于&#xff0c;元组是静态的数据类型&am…

本地如何搭建一个Stable Diffusion 的AI绘画工具?

实现AI绘画自由指南 前期准备安装1.安装 Homebrew 工具2. 安装Python33.下载 Stable Diffusion -webui4.下载大模型5. 安装 GFPGAN&#xff08;神坑&#xff09;5. 允许 stable diffusion-webui 如何使用效果图 最近看到网上各种AI工具很是火爆&#xff0c;心里也是有点痒痒&am…

消防应急照明和疏散指示系统在轨道交通中的设计应用

摘要&#xff1a;本文分析了消防应急照明和疏散指示系统的特点与设计要点&#xff0c;介绍了系统在城市轨道交通中的设计应用&#xff0c;轨道交通设计中新的消防应急照明和疏散指示系统的备用照明仍由EPS供电&#xff0c;新增一套疏散指示照明系统&#xff0c;增加疏散照明指示…

Beta成果测试总结

Beta成果测试总结 Beta是一个项目的早期测试&#xff0c;通过 Beta能够初步的了解整个系统的稳定性&#xff0c;测试系统是否能够满足客户的需求。我们可以在测试过程中发现一些问题&#xff0c;从而快速解决。 当我们在测试一个新系统时&#xff0c;我们需要进行测试前的准备工…

Node.js的简介

一、什么是node.js Node.js是JavaScript语言的服务器运行环境。 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎&#xff0c;V8引擎执行…

一文带你全面了解最火爆的ChatGpt

导读 OpenAI近期发布聊天机器人模型ChatGPT&#xff0c;迅速出圈全网。它以对话方式进行交互。以更贴近人的对话方式与使用者互动&#xff0c;可以回答问题、承认错误、挑战不正确的前提、拒绝不适当的请求。高质量的回答、上瘾式的交互体验&#xff0c;圈内外都纷纷惊呼。 为什…

【ONE·C++ || 继承】

总言 主要介绍继承相关内容。 文章目录 总言1、继承介绍1.1、继承是什么1.2、继承方式与访问限定符1.3、继承作用域 2、基类和派生类对象赋值转换2.1、子类对象可以赋值给父类对象/指针/引用2.2、基类对象不能赋值给派生类对象2.3、基类的指针可以通过强制类型转换赋值给派生类…

flask学习-实践02

项目实战 入门文当(2条消息) python flask框架详解_flask python_尘世风的博客-CSDN博客(2条消息) python flask框架详解_flask python_尘世风的博客-CSDN博客 入门项目 抄作业了&#xff01;6 大 Flask 开源实战项目推荐_小詹学 Python的博客-CSDN博客 (66 条消息) GitHub 上有…

DataStructure--Tree

文章摘录链接 1.树基本概念 计算机数据结构中的树就是对显示中的树的一种抽象&#xff08;倒置现实中的树&#xff09;。 1.1 树 有层次关系N&#xff08;N≥0&#xff09;个节点的有限集合空树&#xff1a; N0 非空树&#xff1a; 有且只有一个根节点1.2 节点 根节点 分…

MongoDB【MongoRepository MongoTemplate】实现增删改查

目录 1&#xff1a;文章评论 1.1&#xff1a;需求分析 1.2&#xff1a;表结构分析 1.3&#xff1a;技术选型 1.3.1&#xff1a;mongodb-driver 1.3.2&#xff1a;SpringDataMongoDB 1.4&#xff1a;文章微服务模块搭建 1.5&#xff1a;文章评论实体类的编写 1.6&#x…

【计算机网络】为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?

【计算机网络】为什么 TCP 每次建立连接时&#xff0c;初始化序列号都要不一样呢&#xff1f; 为什么 TCP 每次建立连接时&#xff0c;初始化序列号都要不一样呢&#xff1f; 主要原因是为了防止历史报文被下一个相同四元组的连接接收。 TCP 四次挥手中的 TIME_WAIT 状态不是会…

现代操作系统和 TCP/IP(第二篇)

接着 现代操作系统和 TCP/IP 继续。 现代分时系统的时间片轮转机制让人们可以 “同时使用计算机”&#xff0c;从而滋生了 “同时使用网络” 的需求&#xff0c;现代分时系统是分组交换网的原动力。 从来没有超过一个人同时使用同一部电话&#xff0c;因此独占线路的电路交换…

2023蓝桥杯省模拟赛附近最小

2023蓝桥杯省模拟赛附近最小 这个题算是一个经典的数据结构入门题了&#xff0c;写了几个解法水一篇文章 map维护 时间复杂度nlgn&#xff0c;但是常数比较大&#xff0c;所以只能过90%数据 #include <iostream> #include<vector> #include<map> #include…