c ++阻止输入不是整数

时间:2013-03-09 18:37:34

标签: c++

在我的代码中,我想阻止用户输入而不是整数字。我的代码是最低的。

#include<iostream>
#include<fstream>
#include<string>
#include<boost/regex.hpp>
#include<iomanip>
using namespace boost;
using namespace std;
int main()
{
int number;
string name,Telephone,email;
ofstream myoutfile("directory.txt");
ifstream myinfile;
bool isvalid=false;
char a[256];
char b[256];
regex reg_email("^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$");
regex reg_tel("^\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})$");
while(number!=3)
{
    cout<<"(1)Add a new record"<<endl;
    cout<<"(2)Display the entire database"<<endl;
    cout<<"(3)Exit"<<endl;
    cin>>number;
    if(number==1)
    {
        cout<<"enter your name."<<endl;
        cin>>name;
        cout<<"enter your email."<<endl;
        cin.ignore(INT_MAX,'\n');
        cin.getline(b,256);
        while (regex_match(b,reg_email)==0)
        {
            cout<<"data wrong!!!!!!"<<endl;
            cin.getline(b,256);
        }
        cout<<"enter your telephone numbers. EX:012-111-1111"<<endl;
        cin.ignore(INT_MAX,'\n');
        cin.getline(a,256);
        while(regex_match(a,reg_tel)==0)
        {
            cout<<"data wrong!";
            cin.getline(a,256);
        }
        myoutfile<<setiosflags(ios::left)<<setw(30)<<name<<setiosflags(ios::left)
                    <<setw(30)<<b<<setiosflags(ios::left)<<setw(30)<<a<<endl;

    }
    else if(number==2)
    {
        myinfile.open("directory.txt",ios::in);
        string temp;
        cout<<setiosflags(ios::left)<<setw(30)<<"name";
        cout<<setiosflags(ios::left)<<setw(30)<<"email";
        cout<<setiosflags(ios::left)<<setw(30)<<"telephone"<<endl;
        while(!myinfile.eof())
        {
            getline(myinfile, temp);
            cout<<temp<<endl;
        }
        myinfile.close();
    }
    else if(number==3)
    {
        cout<<"BYE!";
    }
    else if(scanf("%d",&number)!=1)
        {
            cout<<"Enter number!!!";
            break;
        }
    }
    return 0;
}


我在代码中有一些问题 首先,
当第一次循环运行时,它会很好,
但是当循环第二次运行时,我输入一个非整数,它会显示凌乱的代码 有人知道吗?
其次,

        cout<<"enter your telephone numbers. EX:012-111-1111"<<endl;
        cin.ignore(INT_MAX,'\n');
        cin.getline(a,256);
        while(regex_match(a,reg_tel)==0)
        {
            cout<<"data wrong!";
            cin.getline(a,256);
        }

在上面的代码中,即使我输入正确的电话号码格式,
它总是向我显示错误的数据!&#34;消息,但我再次输入,regex_match测试会没问题

以上是我的问题,真诚地感谢!

0 个答案:

没有答案