私のコードでは、整数語ではなくユーザー入力を防止したいと考えています。私のコードは一番下です。
#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 ループを 1 回実行するときは問題ありませんが
、2 回目にループを実行するときに整数以外を入力すると、コードが乱雑になります。
誰か知っていますか?
2番、
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 テストはうまくいきます。
上記は私の質問です、心から感謝します!