2012-05-30 21 views
0
input = new char[64](); 
std::cout << "wait for cin" << std::endl; 
while (std::cin >> std::setw(64) >> input) 
{ 
    std::cout << "input : " << input << std::endl; 
    ... 

好吧,我向你保證setw()拷貝63個字符的char * input,而不是64,我看到了64rth字符顯示在未來一段時間(CIN)迭代。這種行爲可以被覆蓋嗎?我想要我的所有64個字符和NO nul在我的陣列中。的std ::運輸及工務局局長()插入 0在我的數組的末尾

+0

@BillyONeal:我請你原諒? :D –

+1

這就是'std :: vector'的用途:)使用原始指針+新的函數很容易忘記調用delete []'。但是'vector'爲你做了這些工作(代價是存儲大小的單個指針 - 無論如何你可能需要這麼做),也就是'std :: vector input(64)'和'while(std :: cin >> std :: setw(64)>> input.data())''而不是你在那裏的代碼會更好。 –

+0

啊 - 非常感謝你:) - btw會調用鍵盤中斷刪除這是退出這個特定的應用程序的方式)? –

回答

3

operator>>(istraem&, char*)總是寫入nul字節。

C++ 2003,(強調)27.6.1.2.3/7:

字符被提取和存儲,直到發生以下任一:

  • n-1個字符是存儲;
  • 文件結尾在輸入序列上發生;
  • ct.is(ct.space,c)對於下一個可用輸入字符c是真實的,其中ct是 use_facet>(in.getloc())。

Operator>>然後存儲一個空字節(圖表())中的下一個位置,其可以是第一位置,如果提取沒有 字符。運算符>>然後調用寬度(0)。

你可以得到幾乎行爲你想

  • 分配一個65字節數組,並調用setw(65),或
  • 呼叫std::cin.read(input, 64)

請注意,這兩種解決方案並不相同。使用std::cin >> input對待空格與std::cin.read()不同。

+0

謝謝 - 空白處理有什麼區別? –

+1

'operator >>'跳過最初的空格,讀取打印字符,然後停在第一個空白處。 '.read()'不。嘗試將''12 34 56「'輸入您的'運營商>>'代碼。 –

+0

謝謝:) - 與閱讀的問題是,它等待64個字符 - 而我想輸入一個字符命中輸入,並採取了一個分支(實際上我只是打入輸入,但後來的while()退出lol) - 而當我粘貼64個字符時有另一個分支。所以'setw(65)'(:嘆氣:) –

相關問題