main.cpp:
#include <iostream>
#include <exception>
using namespace std;
class Test
{
public:
string name;
long id;
bool pass;
public:
void getUser()
{
pass=false;
while(pass==false)
{
try{
pass=true;
cout<<"Input your id:"<<endl;
cin>>id;
if(cin.fail()) //判讀輸入是不是正確的
{
throw new exception;
}
cout<<"Input your name:"<<endl;
cin>>name;
//下面是不用異常處理方法做的。注意裡面的continue,其實這是針對上面cin>>id寫的。
if(cin.fail())
{
pass=false;
cin.clear();
cout<<"Your name is wrong,please input again!"<<endl;
continue;
}
}catch(exception* e)//這裡要用exception*不然會編譯會出錯
{
pass=false;
cout<<"Your inputing is wrong,please input again!"<<endl;
cin.clear();//cin.clear()方法很重要,如果不掉用,則cin異常不會終止,那麼程序就進入了死循環
delete e;
}
}
}
void display()
{
cout<<"This is my first class processed in linux!"<<endl;
cout<<"my name is "<<name<<endl;
}
};
int main()
{
Test* tt= new Test();
tt->getUser();
tt->display();
return 0;
}
筆記:
1.注意函數cin.fail()的用處。
2.注意函數cin.clear()的用法(有注釋)。
3.注意catch中的exception*.
3.getUser()這個函數目的是為了檢測輸入異常。這裡可以是一個c++中異常處理的實例,網上很多人士說建議不要使用c++中的異常處理機制,不知道什麼原因。所以我就在cin>>name下面實現了不用異常處理的方法,但是寫的代碼比較多。同時,這個方法處理完輸入異常後會做一個循環,直到你輸入正確的內容。