下面程序打印1月到12月的月名,可輸入數字,但是如果輸入字母就會死循環,那么怎么可以使程序不進入死循環,輸入字母時,輸出"Error".
#include<iostream.h>
char * month(int i)
{static char * month[]={
"Error!",
"Januray",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"};
if(i<1||i>12) return month[0];
else return month[i];
}
void main()
{
int i;
do{
cout<<"Please input the number of the month ";
cin>>i;
if(i!=-1) cout<<month(i)<<endl;
}while(i!=-1);
}
12 个解决方案
void main()
{
int i;
do{
cout<<"Please input the number of the month ";
cin>>i;
if(!cin){
cin.clear();
cin.ignore(1000,'\n');
i=-1;
}
if(i!=-1) cout<<month(i)<<endl;
}while(i!=-1);
}
根據我的經驗,像這種程序如果考慮健壯性的話,凡涉及到數字輸入的要想避免死循環,只有改用字符數組輸入。然后對輸入的字符進行合法性判斷,這樣才能控制所有的錯誤輸入。
當然從最根本來說,再考慮數組大小的話,這種方法還是有問題的,因為如果故意輸入超過數組大小的字符數,那就出現了緩沖區溢出錯誤,程序還是會崩潰。
因此只有用string類最安全。
既可以判斷字符合法性,又不會出現緩沖區溢出錯誤。
學習下二樓的方法。
不過while語句中應改為(i==-1)
計算機是一個你叫他跑就跑得傻逼
他要干什么都要你事先就跟他說好,
你本來就告訴他去叫他去兜圈圈
而且跟他說好你說國語他就要
聽你話,
但突然你說英語,他也會跑
但是他就不知道一跑該什么時候挺下來了
這樣解釋行不?
計算機是一個你叫他跑就跑得傻逼
-------------------
頂這句
學習下二樓的方法。
不過while語句中應改為(i==-1)
-----------------------------------
為什么...
好困惑啊~~~~
re: ch1oE()
學習下二樓的方法。
不過while語句中應改為(i==-1)
-----------------------------------
為什么...
好困惑啊~~~~
--------------------------------------------------
因為二樓的執行效果是,你輸入了字母等非法字符后,它根本不給你機會重新輸入,連提示都沒有就直接退出了。
計算機是一個你叫他跑就跑得傻逼
他要干什么都要你事先就跟他說好,
你本來就告訴他去叫他去兜圈圈
而且跟他說好你說國語他就要
聽你話,
但突然你說英語,他也會跑
但是他就不知道一跑該什么時候挺下來了
這樣解釋行不?
--------------------------------------------------------------
經典!