[英]Reading in standard input into a char array - C++
我想知道從命令行獲取輸入的可接受方法是什么,該命令行也捕獲空白。 我以為這樣就可以了...
char text[500];
int textSize = 0;
int main() {
while (!cin.eof()) {
cin >> text[textSize];
textSize++;
}
for(int i = 0; i < textSize; i++) {
cout << text[i];
}
return 0;
}
但是看起來它跳過空白。 我切換到這個...
char c;
while ((c = getchar()) != EOF) {
text[textSize] = c;
textSize++;
}
效果很好,但是我從C編程書中知道這一點。 想知道如何在C ++中處理它
默認情況下,C ++中的流提取運算符將跳過空格。 您可以使用noskipws
流操縱器來控制它:
while (!cin.eof()) {
cin >> noskipws >> text[textSize];
textSize++;
}
就是說,如果您閱讀過多的文本,那么您編寫的程序就會出現明顯的緩沖區溢出問題。 如果您打算讀取固定數量的字節,請使用istream::read
。 如果您想讀取可變數量的字節,請考慮將std::string
與istream::get
結合使用,如下所示:
std::string input;
char ch;
while (cin.get(ch)) {
input += ch;
}
這沒有緩沖區溢出的風險,應該處理盡可能多的文本(當然要受可用內存的限制。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.