我想知道从命令行获取输入的可接受方式是什么,它也可以捕获空白区域。我以为这样做会......
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 ++中处理它
答案 0 :(得分:3)
默认情况下,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;
}
这不存在缓冲区溢出的风险,应该尽可能多地处理文本(当然,受可用内存的限制。)