由於cin或者scanf造成的死迴圈問題
先粘程式碼:
int iSelect = 0;
while (1)
{
std::cin >> iSelect;
switch (iSelect)
{
case -1:
break;
case 0:
break;
case 1:
break;
case 2:
break;
default:
std::cout << "argument error" << std::endl;
break;
}
if (-1 == iSelect)
break;
}
程式很簡單,就是想迴圈選擇-1到2之間的數字,然後進行對應的操作。但是有個很詭異的問題,當輸入的iSelect不是數字,而是字元的時候,那麼程式就會陷入死迴圈。
原理:程式陷入死迴圈是因為內部,呼叫cin或者scanf的時候,如果發現輸入緩衝區的資料是非數字的字元的時候,就會放棄本次讀取。讀取識別符號也不會辨識為讀取。
解決方法:如果是cin,那麼需要在程式迴圈的開頭呼叫std::cin.clear()清空輸入緩衝區,並且呼叫std::cin.sync()標識緩衝區讀取識別符號。如果是scanf,那麼需要重新整理緩衝區,呼叫fflush(stdin)。
相關推薦
由於cin或者scanf造成的死迴圈問題
先粘程式碼: int iSelect = 0; while (1) { std::cin >> iSelect; switch (iSelect) { case -1: break; case 0: break;
Linux gcc for 迴圈中 i=i++ 會造成死迴圈問題及 ++i / i++ 彙編分析
在把 Windows 程式移植到 Linux 時遇到了死迴圈,最後定位到了類似這種的語句 for (i = 0; i < 1; i = i++), 別問我是誰寫的,為什麼這麼寫(淚目!)。 根據我自己的感覺, i = i++ 應該等價於 i++(C標準中 i=i++ 的行為未
問題:在程式中儲存資料到索引庫,發生異常jackson資料轉換異常,造成死迴圈棧溢位 解決@JsonIgnore註解
org.springframework.data.elasticsearch.ElasticsearchException: failed to index the document [id: 69] at org.springframework.data.elas
解決json序列化有多對一和多對多關係的物件時造成死迴圈的問題
json序列化的物件中存在雙向引用會導致的無限遞迴(infinite recursion)問題。 使用@JsonBackReference標記在有多對一或者多對多關係的屬性上即可解決這個問題,舉例
oracle處於資源正忙,或者session處於死迴圈的解決方法
實際遇到的問題之一: 在更新function時,程序直接卡死,原因可能是該function正在被其他session呼叫, 不可更新而造成的。 首先,查出session_id: select session_id from v$locked_object; 然後,根據ID查
jdk1.8 hashmap多執行緒put不會造成死迴圈
hashmap多執行緒操作會造成連結串列的迴圈,這個已經被各種部落格的講爛了。大家都知道是put過程中的resize方法在呼叫transfer方法的時候導致的死鎖,故在此不詳述。 今天在看《java高併發程式設計》的時候,書中提到“但是這個(hashmap)死迴圈的問題在
cin輸入的型別不匹配造成的死迴圈 cin.clear() cin.ignore()函式
當使用cin輸入時,如果想要輸入的型別為int的,輸入時輸入成了字元,就會導致cin錯誤 #include <iostream> #include <set> using namespace std; int main() { int a
排查定位由死迴圈引起的cpu負載飆高或者死鎖
在linux下: linux的top命令可以檢視程序的pid,我們找到java程式的pid, 然後執行 top -Hp pid 就可以檢視到這個程序下執行緒的執行情況。 這樣粗略可以看到哪些執行緒比較繁忙,這時候就用到jdk自帶的小工具jstack(官方文件或者自行 百度)。 我們
微信開發者工具初始化專案時,進去報錯:小程式重啟耗時過久,請確認業務邏輯中是否有複雜運算,或者死迴圈
如圖上,為錯誤原因。 之前用開發者工具用的好好地,前些日子又版本更新,升級了一下,然後開啟專案就出現上面的問題。當時以為電腦出啥問題了,也沒當回事。今天再次開啟開發者工具,發現還是出現上面的問題。一臉懵,新建專案,啥都沒做竟然出問題。網上一查同樣的問題一大堆。
JS---焦點事件onfocus和onblur造成的死迴圈問題
alert和onblur死迴圈 點選文字框觸發聚焦事件,彈出警告框,然後點選警告框中中的確定,其實焦點已經移動到警告框,觸發失焦事件了,確定後焦點又會回到文字框,又會觸發聚焦事件,形成迴圈。因此alert()不應該與焦點事件一起使用。 <script type="text/j
Ubuntu 16.04 一直卡在開機介面或者使用者登入介面死迴圈問題的解決
轉自: 筆者配置環境:ubuntu 16.04+tensorflow+cudnn,剛開始經常出現重啟或開機時出現一直卡在開機介面或者使用者登入介面死迴圈問題。 原因:NVIDIA 驅動所致,之前安裝方式nvidia驅動出問題。 解決辦法:解除安裝nvidia驅動,重
【Mybatis原始碼分析】13-記一次PageHelper reasonable引數使用不當造成的死迴圈
問題描述及原因 使用Mybatis PageHelper外掛做了表的分頁查詢,要求查詢符合某一條件的所有記錄做處理,就寫了一個迭代器在while迴圈裡對每條記錄做處理,直到符合條件的記錄都處理完程式返回。程式碼如下 public class ReconPaymentI
leetcode-645中vector.size()的返回型別以及其應用中死迴圈或者資料型別衝突的問題
leetcode–645 該題是一道分治問題,求陣列中最大數的下標,然後把該陣列分成左右兩個子區間 class Solution { public: int max(int i, int j,vector<int>&nums){ int m
java:警惕Integer.MAX_VALUE造成的死迴圈
有這樣一道題: 程式設計測試,遍歷 0 到 int所能表示最大的正數,將消耗的時間列印。 下面是我的程式碼: int temp = 0; Date dt1 = new Date(); long
-server多執行緒由於可見性導致死迴圈
-server執行正確執行應該在睡眠2秒後呼叫getStop()以後停止迴圈,但是由於虛擬機器效能的優化可能只在開始的時候第一次讀取stop的值為false之後就不會在讀取stop的值。正確的方法應該在把private boolean stop改為 private volia
在迴圈中的scanf()不被執行面陷入死迴圈
今天好蠢,之前忙於應付期末考試編個小程式手都生了, scanf("%d",&p->num);寫成了scanf("&d",&p->num); 【當時還以為是結構體的問
微信小程式報錯:小程式重啟耗時過久,請確認業務邏輯中是否有複雜運算,或者死迴圈的解決
在開啟新版本的微信開發者工具時,彈出以下錯誤框:然後你再等會會發現,頁面照樣載入Ok,但是會出現這麼一個情況,就是開啟一個.wxml或者.wxss或者.js檔案,會出現空白的情況,就是你檔案裡的程式碼不見了,未加載出來....如下圖這個錯誤的解決:(1)首先第一點是你檔案裡的
焦點事件onfocus和onblur造成的死迴圈問題
在學習焦點事件的時候,使用onfocus和alert(),onblue和alert(),點選文字框觸發onfocus()事件,彈出alert文字資訊,點選確定後又觸發onblur事件,彈出alert()資訊,再點選確定又觸發onfocus事件,形成一個死迴圈,程
c++獲取鍵盤輸入cin、scanf使用詳解
pan microsoft nbsp stdio.h c語言 多個 鍵盤輸入 獲取鍵盤輸入 int cin是c++標準,scanf是在c中使用的 1 #include<cstdio> 2 #include<iostream>
Win10 由於安裝軟件造成的開機藍屏解決方法
class con center img ali 復制 config itl conf Win10安裝軟件後藍屏且無法進入安全模式的詳解 Win10系統正式版軟件版本:簡體中文版準備工具: U盤啟動盤( U教授U盤啟動盤制作方法 )。需要在正常的電腦上制作。具體方法: