亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我想要問的是在輸入時如果輸入字母或其他的就會進入死循環,請問該如何解決

我想要問的是在輸入時如果輸入字母或其他的就會進入死循環,請問該如何解決

C++
九州編程 2022-05-27 09:05:06
void main(){float a,b,c;cin>>a;cin>>b;c=(a+b)/2.0cout<<c<<endl;}
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

進入死循環是因為你輸入的數據不是預設的類型,比如你的cin>>a;但是你的a變量預設的是float類型,但是如果你不輸入float類型的數據,那么就會導致輸入流關閉,所以就不能再輸入數據,而由于輸入的數據類型不對,所以它也不會被a接收而仍存在于輸入緩沖里,這樣就導致了死循環,LZ要做的就是在輸入錯誤類型的情況下,消除cin的錯誤標志,然后清空輸入緩沖,即可。具體去看看關于I/O流操作的資料就明白了

查看完整回答
反對 回復 2022-05-30
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

可以用一個char[]字符串來接受輸入(當然也可以用string,不過得導入string頭文件)然后判斷一下輸入的內容,看看他的ascii碼。注意要用字符的方式表示數字。

#include <iostream>
#include <string>
using namespace std;
void main()
{
float a,b,c;
int i;
string buffer; //用來接收輸入
loopStart1:
cin>>buffer;
//對字符串中的每一個字符進行檢測,
//如果不是1-9的數字或者小數點,就提示輸入錯誤
for (i=0;i<buffer.length();i++)
{
if ((buffer[i]>'9'||buffer[i]<'0')&&(buffer[i]!='.'))
{
cout<<"您的輸入有誤,請重新輸入!"<<endl;
goto loopStart1;
}
else
break;
}
//將字符串轉換為小數。
//其中c_str()函數將會返回一個char *字符串。
a=atof(buffer.c_str());
loopStart2:
cin>>buffer;
for (i=0;i<buffer.length();i++)
{
if ((buffer[i]>'9'||buffer[i]<'0')&&(buffer[i]!='.'))
{
cout<<"您的輸入有誤,請重新輸入!"<<endl;
goto loopStart2;
}
else
break;
}
b=atof(buffer.c_str());
c=(a+b)/2.0;
cout<<c<<endl;
}

 


查看完整回答
反對 回復 2022-05-30
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

在cin>>時如果我們輸入一個字符就會導致刷屏的結果這是因為非數字字符無法被cin接收而一直停留在緩沖區,導致下一次cin時直接從緩存讀數但字符無法讀取結果導致無限循環這被很多人認為成庫的bug 解決方法:
1> 在cin>>后加cin.ignore(); cin.clear(); cin.ignore()方法cin.ignore( 5, 'c' ) 的是從輸入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每拋棄一個字符,它都要計數和比較字符:如果計數值達到5或者被拋棄的字符是'c',則cin.ignore() 函數執行終止;否則,它繼續等待。它的一個常用功能就是用來清除以回車結束的輸入緩沖區的內容,消除上一次輸入對下一次輸入的影響。比如可以這么用:cin.ignore( 1024, '\n' );,通常把第一個參數設置得足夠大,這樣實際上總是只有第二個參數 '\n' 起作用,所以這一句就是把回車(包括回車)之前的所以字符從輸入緩沖(流)中清除出去。 cin.clear用法如果輸入發生錯誤發生,那么流狀態既被標記為錯誤,你必須清除這些錯誤狀態,以使你的程序能正確適當地繼續運行。要清除錯誤狀態,需使用clear()函數。此函數帶一個參數,它是你將要設為當前狀態的標志值。,只要將ios::goodbit作為實參。
2> 在cin>>后加fflush(stdin);(需要stdio.h) fflush(stdin)刷新標準輸入緩沖區


 


查看完整回答
反對 回復 2022-05-30
  • 3 回答
  • 0 關注
  • 322 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號