如何对多个小数点(1.1.1)这种非法输入进行识别
#include<iostream>void time(int, int);
int main()
{
int hour;
std::cout << ("请输入小时数:");
while (!(std::cin >> hour) | hour < 0 | hour >23)// 非法输入
{
std::cin.clear();
std::cin.ignore(100, '\n');
std::cout << ("请输入正确的小时格式:");
}
int minute;
std::cout << ("请输入分钟数:");
while (!(std::cin >> minute) | minute < 0 | minute >59)// 非法输入
{
std::cin.clear();
std::cin.ignore(100, '\n');
std::cout << ("请输入正确的分钟格式:");
}
time(hour, minute);
std::cin.get();
std::cin.get();
return 0;
}
void time(int h, int min)
{
std::cout << std::endl << ("时间:") << h << (":") << min << std::endl << std::endl;
}
格式如下:
请输入小时数:
请输入分钟数:
时间:
现在考虑到的非法输入有字母符号和超出取值范围的整数
但是如果输入例如 1.1.1 这样的,程序就会出错,请问如何对这种错误进行识别呢?
谢谢大家了,小弟初来乍到请多多指教! 结束输入小时后对流进行清空即可
#include<iostream>
void time(int, int);
int main()
{
int hour;
std::cout << ("请输入小时数:");
while (!(std::cin >> hour) | hour < 0 | hour >23)// 非法输入
{
std::cin.clear();
std::cin.ignore(100, '\n');
std::cout << ("请输入正确的小时格式:");
}
std::cin.clear();
std::cin.ignore(100, '\n');
int minute;
std::cout << ("请输入分钟数:");
while (!(std::cin >> minute) | minute < 0 | minute >59)// 非法输入
{
std::cin.clear();
std::cin.ignore(100, '\n');
std::cout << ("请输入正确的分钟格式:");
}
time(hour, minute);
std::cin.get();
std::cin.get();
return 0;
}
void time(int h, int min)
{
std::cout << std::endl << ("时间:") << h << (":") << min << std::endl << std::endl;
}
谢谢BngThea 的指教~
按照您的方法,程序确实能够忽略小数点以及之后的数据了
输入输出如下
请输入小时数:1.2
请输入分钟数:3.4
时间:1:3
但是此时程序不会报错,不知道如何修改能够在输入类似小数点这样的非法数据时,能够提示重新输入呢~? sempre_zhou 发表于 2017-11-14 11:58
谢谢BngThea 的指教~
按照您的方法,程序确实能够忽略小数点以及之后的数据了
输入输出如下
要对逻辑进行一下重新的设计:
int hour;
char next;//用来存储已读取数据的下一个字符,如果有的话
std::cout << ("请输入小时数:");
while (1)
{
if (std::cin>>hour)
{
if (hour < 0 || hour > 23)
{
std::cin.clear();
std::cin.ignore(100, '\n');
std::cout << ("请输入正确的小时格式:");
continue;
}
if (!std::cin)//如果后面没有字符,那么证明输入正确,跳出循环
{
break;
}
else // 后面有字符,对字符进行判断
{
std::cin.get(next);
if (isspace(next))//如果后面的字符是空格之类的,说明输入正确,跳出循环
{
break;
}
else
{
std::cin.clear();
std::cin.ignore(100, '\n');
std::cout << ("请输入正确的小时格式:");
}
}
}
}
页:
[1]