程序健壯性,簡單


下面程序打印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 个解决方案

#1


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

}

#2


根據我的經驗,像這種程序如果考慮健壯性的話,凡涉及到數字輸入的要想避免死循環,只有改用字符數組輸入。然后對輸入的字符進行合法性判斷,這樣才能控制所有的錯誤輸入。
當然從最根本來說,再考慮數組大小的話,這種方法還是有問題的,因為如果故意輸入超過數組大小的字符數,那就出現了緩沖區溢出錯誤,程序還是會崩潰。
因此只有用string類最安全。
既可以判斷字符合法性,又不會出現緩沖區溢出錯誤。






#3


學習下二樓的方法。
不過while語句中應改為(i==-1)

#4


誰能解釋一下為什么會出現死循環啊!!

#5


計算機是一個你叫他跑就跑得傻逼
他要干什么都要你事先就跟他說好,
你本來就告訴他去叫他去兜圈圈
而且跟他說好你說國語他就要
聽你話,
但突然你說英語,他也會跑
但是他就不知道一跑該什么時候挺下來了


這樣解釋行不?

#6


計算機是一個你叫他跑就跑得傻逼
-------------------
頂這句

#7


問題出在將char轉換為int這上面吧

#8



學習下二樓的方法。
不過while語句中應改為(i==-1)

-----------------------------------


為什么...
好困惑啊~~~~

#9


按行讀字符串,然后手動判斷格式,嘗試轉換。

#10


將i定義為字符數組,輸入后進行比較。

#11


re: ch1oE() 

學習下二樓的方法。
不過while語句中應改為(i==-1)
-----------------------------------
為什么...
好困惑啊~~~~
--------------------------------------------------
因為二樓的執行效果是,你輸入了字母等非法字符后,它根本不給你機會重新輸入,連提示都沒有就直接退出了。


  
 

#12


計算機是一個你叫他跑就跑得傻逼
他要干什么都要你事先就跟他說好,
你本來就告訴他去叫他去兜圈圈
而且跟他說好你說國語他就要
聽你話,
但突然你說英語,他也會跑
但是他就不知道一跑該什么時候挺下來了


這樣解釋行不?
--------------------------------------------------------------
經典!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com