2010-03-18 71 views
3

我正在從數據流中讀取數據到一個給定長度的char數組中,並且我希望使讀取的最大寬度足夠大以適應char數組。如何在C++中設置最大讀取長度?

我使用char數組的原因是我的規範的一部分是任何單個標記的長度不能超過某個值,所以我保存了一些構造函數調用。

我想寬度()做了什麼,我想,但我顯然是錯誤的...

編輯:我使用的是流提取運算符來進行提取,因爲這些都是分隔值的純文本文件由空白。

+0

我不明白。 'istream :: read()'可以指定想要讀入緩衝區的字符數量。爲什麼這不適合你? – 2010-03-18 16:20:05

+0

我的意思是我希望提取操作符將自己限制到一定數量的字符長度。然而,我越是想到這一點,那麼我越意識到這一點,我可能不是標準的行爲...... – Alex 2010-03-18 16:26:39

+0

你的價值觀是全部文本的,還是其中的一些數字? – Bill 2010-03-18 18:10:51

回答

3
char x[4]; 
cin.width(4); 
cin >> x; 
cout << x; 

輸入: 「ABCDEF」
輸出: 「ABC」 (x[3]是空終止字符)

寬度在這種情況下工作得很好。

注意:經驗測試表明cin.width調用僅持續一個流操作。改用cin >> setw(4) >> x;可能更方便,雖然這需要iomanip

+0

請注意,如果輸入包含空格,則會失敗。嘗試輸入:「a b c d e f」。輸出:「a」。 – Bill 2010-03-18 17:01:20

+0

@ Bill:我認爲這是件好事。 OP表示這些值由空格分隔。 – Brian 2010-03-18 17:33:32

+0

啊,我錯過了編輯,謝謝! – Bill 2010-03-18 17:57:42

5

如果您正在處理文本,你要尋找的get功能:http://cppreference.com/wiki/io/get

const int size = 200; 
char myArray[size] = {}; 

cin.get(myArray, size); 

注:僅size - 1字符閱讀,這讓在myarray的一個NULL終止符。

如果它是原始數據,你可能會喜歡readhttp://cppreference.com/wiki/io/read

const int size = 200; 
char myArray[size] = {}; 

cin.read(myArray, size); 

size字節讀取。