关于判断用户输入合法性的问题
本帖最后由 LLK4ever 于 2021-7-22 21:15 编辑代码需求:让用户输入4个整数,计算输入四个整数的和与平均值
请问如何改这个程序,让它可以在用户输入浮点数(比如2.3)时,也报错?
现在的代码,输入2.3后现象如图所示
正常应该是:
请输入四个整数
请输入第一个数
2.3
请输入一个合法的值
1
请输入第2个数
。。。
请问我到底哪里错了
这个咋弄悬赏啊,咋变成付费了{:10_277:}
int main(void)
{
const unsigned short ITEM=4;
int a;
int sum=0;
float average=0;
std::cout<<"please enter"<<ITEM<<"numbers:"<<std::endl;
for(int i=0;i<ITEM;i++)
{
std::cout<<"请输入第"<<(i+1)<<"个数"<<std::endl;
while(!(std::cin>>a)) //判断输入合法性
{
std::cin.clear();
std::cin.ignore(100,'\n') ;
std::cout<<"请输入一个合法的值" <<std::endl;
}
sum += a;
average = sum/ITEM;
}
std::cout<<"和为"<<sum<<"平均值为"<<average<<std::endl;
return 0;
} #include <iostream>
#include <string>
#include <sstream>
bool verify(const std::string &s) {
bool flag = false;
for(const auto &i: s) {
if(isdigit(i)) flag = true;
else if(isspace(i)) {
} else return false;
}
return flag;
}
int read_int(std::istream &is) {
std::string line;
while(true) {
std::getline(is, line);
if(verify(line)) {
std::stringstream ss(line);
int n;
ss >> n;
return n;
}
std::cout << "输入错误,请重新输入" << std::endl;
}
}
int main() {
std::cout << read_int(std::cin) << std::endl;
return 0;
}
本帖最后由 LLK4ever 于 2021-7-22 22:01 编辑
请问有适合小白一点的答案吗?{:10_277:} 用ctype.h来判断呀
https://www.runoob.com/cprogramming/c-standard-library-ctype-h.html #include <iostream>
int main(void)
{
const unsigned short ITEM=4;
int a;
int sum=0;
float average=0;
std::cout<<"please enter"<<ITEM<<"numbers:"<<std::endl;
for(int i=0;i<ITEM;i++)
{
std::cout<<"请输入第"<<(i+1)<<"个数"<<std::endl;
/*
while(!(std::cin>>a)) //判断输入合法性
{
std::cin.clear();
std::cin.ignore(100,'\n') ;
std::cout<<"请输入一个合法的值" <<std::endl;
}
*/
while(true) {
std::cin >> a;
char ch;
std::cin >> ch;
if(ch != '.') {
std::cin.unget();
break;
}
std::cin.ignore(100,'\n') ;
std::cout<<"请输入一个合法的值" <<std::endl;
}
sum += a;
average = sum/ITEM;
}
std::cout<<"和为"<<sum<<"平均值为"<<average<<std::endl;
return 0;
}
楼上提供的代码还是有问题的
运行结果如下:
不符合需求
页:
[1]