📄 fngetdate.cpp
字号:
#define REINPUTAGAIN 10
#define TOO_LONG 20
#define WRONG 30
#include<stdlib.h>
#include<iostream.h>
#include<string>
#include<ctype.h>
using std::string;
void fnGetDate(int &i) //用于获得输入的整数i
{
string str; //不可用static,因为会影响递归调用
static char s_cTemp;
bool bError = false;
while(1)
{
cin.get(s_cTemp);
if(s_cTemp=='\n')break;
else str+=s_cTemp;
}
try{
if(str.length() == 0)throw REINPUTAGAIN;
else if(str.length() > 9){
cout << "太大了!请重输:";
throw TOO_LONG;
}
if (!isdigit(str[0]) && str[0] != '-'){
cout<<"输入不合法,请重输: ";
throw WRONG;
}
for(short j=1;str[j]!='\0';j++)
{
if(!isdigit(str[j])) //int isdigit(int ch) 是否为数字:是-非0;不是-0
{
cout<<"error!请输入整数:";
throw WRONG;
}
}
}
catch(int error = 0){
if(error != 0){
cout<<char(7);
bError = true;
}
fnGetDate(i);
}
if(bError == false)i=atoi(str.c_str());
}
void fnGetDate(char s[],int iLength=40) //用于获得字符串s
{
static char s_cTemp;
for(short i=0; (s_cTemp=cin.get())!='\n' && i<iLength-1; i++)
{
s[i]=s_cTemp;
}
s[i]='\0';
if(i==0)fnGetDate(s,iLength);
else if(i==iLength-1 && s_cTemp!='\n')
{
while(cin.get()!='\n')NULL;
cout<<"Too long!Please input again: ";
fnGetDate(s,iLength);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -