2016-08-30 50 views
0

我試圖存儲空間' '作爲識別的字符直接進入字符數組,這樣做的:存儲從用戶輸入的字符數組空間

char ** board = new char *[row]; 
for (int r = 0; r < row; r++) { 
    board[r] = new char[col]; 
} 

for (int r = 0; r < row; r++) { 
    cout << "Enter input: " << endl; 
    cin >> board[r]; 

} 

但是,如果我進入' '到控制檯它執行Enter input行兩次(當row3 3`),然後終止。我怎樣才能將輸入(包括空格字符)直接存儲到板上?

+2

如果你想要整個*行然後使用['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)和['std :: getline'](http:取而代之的是//en.cppreference.com/w/cpp/string/basic_string/getline)。 –

+0

這不是[mcve]。 'board'的類型是什麼? – Xirema

+2

重新打開,因爲我認爲你需要get()而不是getline(),但是這個問題需要更多的細節。 – NathanOliver

回答

1

嘗試更多的東西是這樣的:

#include <iostream> 
#include <iomanip> 
#include <limits> 

char ** board = new char *[row]; 
for (int r = 0; r < row; r++) { 
    board[r] = new char[col]; 
} 

for (int r = 0; r < row; r++) { 
    std::cout << "Enter input: " << std::endl; 
    std::cin >> std::noskipws >> std::setw(col) >> board[r]; 
    std::cin.clear(); 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 

然而,正如上面所提到的意見,你真的應該使用std::stringstd::getline()代替。如果可以的話,你的陣列更改std::vector<std::string>

#include <iostream> 
#include <vector> 
#include <string> 

std::vector<std::string> board(row); 

for (int r = 0; r < row; r++) { 
    std::cout << "Enter input: " << std::endl; 
    std:getline(std::cin, board[r]); 
} 

如果您不能使用std::vector,你至少可以使用std::string讀取用戶的輸入,那麼它的數據複製到您的char[][]陣列:

#include <iostream> 
#include <string> 
#include <cstring> 

char ** board = new char *[row]; 
for (int r = 0; r < row; r++) { 
    board[r] = new char[col]; 
} 

for (int r = 0; r < row; r++) { 
    std::cout << "Enter input: " << std::endl; 
    std::string input; 
    std::getline(std::cin, input); 
    std::strncpy(board[r], input.c_str(), col-1); 
    board[r][col-1] = '\0'; 
} 
+0

謝謝!出於某種原因,當我嘗試編譯時,使用strncpy會引發錯誤:「此函數或變量可能不安全,請考慮使用strncpy_s。」但是,strncpy_s似乎也不起作用。 –

+1

'strncpy()'是一個標準的C函數,''將它包裝在'std'命名空間中。 'strncpy()'是「不安全的」,因爲如果輸入長度> =指定的目標長度,則輸出不是空終止的。 'strncpy_s()'保證空終止,但是''不包裝的非標準微軟函數,所以你將不得不使用''而不是'std ::'。或者您可以定義'_CRT_SECURE_NO_WARNINGS'或使用'#pragma warning'來禁用警告。看看將C代碼與C++代碼混合後會發生什麼?你真的應該停止在C++中使用'char *'字符串。 –

0

您的問題是,控制檯無法識別' '作爲有效輸入,因此它再次詢問。我不知道如果get()getline()而不是cin可以工作,但你需要找到一種方式,使控制檯得到輸入的空白​​,或者你可以創建某種過濾器,以便你的程序識別一個特殊的字符爲空白和商店是這樣的。希望幫助

+0

是的。我非常瞭解這一點。但我不知道如何獲得輸入,以便它識別''''並將輸入存儲到我的電路板中。 –

+0

你可以設置一個if語句,如果輸入是字符的組合,但它不會存儲空間 – Chris

相關問題