2016-08-25 47 views
4

我已經看到了關於驗證輸入格式的其他問題,但是我正在尋找一個更具體的問題的答案。驗證whitepsace分開的整數C++

目前,我需要讀入2個整數值並將它們存儲爲座標。我已經使用:

cin >> x >> y

這將在由空格分隔讀取X & y的值。

然而,比

INT whitepsace INT

會破壞我的計劃之外的任何輸入。我試圖驗證輸入以確保每個值都是整數,但它僅適用於第一個整數輸入。

我還需要確保輸入的格式保持爲int空格int這樣我才能在整個程序中始終如一地使用這些值。

任何想法?

事情我都試過,沒有運氣:

  • 用做閱讀 - while循環W/cin.fail()max()檢查。
  • 使用isDigit()
+0

請說明是否總是第二個整數後的行尾;以及「輸入的格式仍然是int whitespace int」的意思是什麼?你的意思是你想保留輸入文件中兩個整數之間的確切空格嗎?另外,當輸入與期望不符時,你想要發生什麼? –

回答

3

閱讀兩個值成兩個std::string第一個驗證。這將讀取任何以空格分隔的文本,而不會使std::cin進入失敗狀態。

一旦讀入兩個單詞,對於每個單詞構建一個std::istringstream,使用operator>>嘗試將其解析爲一個int。使用fail()檢查轉換是否失敗,以及是否已使用整個std::istringstream

如果std::istringstream是不是在故障狀態,並get()返回eof,那麼整個字被成功地解析爲int

問題解決。

這當然不是這樣做的唯一方法,但可能是最簡單的方法,並且該方法僅限於使用基本的C++庫類,沒有什麼太花哨。

+0

我正要提出一個問題 - 但我設法弄清楚了自己。謝謝你。真的很感激它! –

+1

這是一種罕見的情況之一,我有時會用FILE *'恢復到很好的'scanf'系列函數,並且不會爲此感到不快。 –

+1

@JasonC'cin >> x >> y'和'scanf(「%d%d」,&x,&y)'在錯誤處理要求上非常相似 –