0

在我的代码中,我想防止用户输入不是整数单词。我的代码是底部。

#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;
}


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

        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);
        }

在上面的代码中,即使我输入了正确格式的电话号码,
它总是显示“数据错误!” 消息,但我再次输入,regex_match 测试就可以了。

以上是我的问题,衷心感谢!

4

0 回答 0