簡體   English   中英

C ++ cin數字忽略第一行?

[英]C++ cin numbers ignores first line?

我遇到了一個非常奇怪的問題。 我可以在win7筆記本電腦和ubuntu機器上進行復制。

我有一個這樣的C ++程序:

#include <string>
#include <sstream>
#include <iostream>
using namespace std;

int main() {
  for (int i = 0; i < 9; i++) {
    string line;
    getline(cin, line);
    stringstream ss(line);

    for (int j = 0; j < 9; j++) {
      int p = 8;
      ss >> p;
      cout << p;
    }
    cout << endl;
  }
  return 0;
}

現在,如果我編譯它,請使用./a.out < test.txt運行它,其中text.txt包含:

1 2 3 4 5 6 7 8 9
2 2 3 4 5 6 7 8 9
3 2 3 4 5 6 7 8 9
4 2 3 4 5 6 7 8 9
5 2 3 4 5 6 7 8 9
6 2 3 4 5 6 7 8 9
7 2 3 4 5 6 7 8 9
8 2 3 4 5 6 7 8 9
9 2 3 4 5 6 7 8 9

它將輸出(無空格):

8 8 8 8 8 8 8 8 8
2 2 3 4 5 6 7 8 9
3 2 3 4 5 6 7 8 9
4 2 3 4 5 6 7 8 9
5 2 3 4 5 6 7 8 9
6 2 3 4 5 6 7 8 9
7 2 3 4 5 6 7 8 9
8 2 3 4 5 6 7 8 9
9 2 3 4 5 6 7 8 9

為什么第一行錯了? 我也嘗試過從循環中讀取第一行。 另外,如果我用cin > p替換ss > p ,那么我得到的輸出表全是8。

這沒有任何意義!

好的,你們是對的。 一些奇怪的東西作為我的輸入文件的第一個字符:

od -c test.txt
0000000 357 273 277   2       0       5       0       0       7       0
0000020       0       6  \n   4       0       0       9       6       0
0000040       0       2       0  \n   0       0       0       0       8

數據有問題(因為代碼看起來不錯)。 您很可能已使用帶有BOM的UTF-8編碼保存了文本文件。 UTF-8 BOM在文件的開頭是三個字節,嘗試將其解釋為十進制數指定將失敗。

第二,第三,第四行等。確定,因為您正在為每一行創建新的istringstream對象,所以不要保留上一行的錯誤模式。

因此,修復:假設沒有BOM,則保存文件-假設BOM假設正確。

干杯,……

您的代碼對我來說似乎很好,如果您是我,則將仔細檢查輸入文件:您確定第一行沒有空的第一行或某些非數字字符嗎?

我懷疑您編寫了自己的getline() ,該錯誤在那里。 InputStreams有一個getline(char*, int) ,我懷疑您在第一個參數中string.begin() ,而在后面的參數中包含了Some Other Number。

不要那樣做

程序應該做的就是將輸入復制到輸出中(給出此代碼和輸入)。 即使在“有效”的線路上也沒有這樣做。

我在這里看到了許多經驗不足的程序員的“簽名”。 1)變量名過短(在for循環計數器之外),“ ss”和“ p” 2)魔術錯誤號(8),尤其是不能從數據中脫穎而出的錯誤號。 3)“使用”

1和3都暗示着打字速度不足,因此經驗不足……盡管您的聲譽超過1k(這主要是基於提問……情況變得更加清晰)。

我會這樣重寫它:

int curDig;
curLine >> curDig;
if (curLine.good()) {
  cout << curDig;
} else {
  cout << "FAILED at line: " << lineIdx << " containing: " << line << std::endl;
}

很有可能,由於我認為getline()的錯誤,您很快就會看到“ Failed at line:0 included:”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM