我正在编写一个小shell程序,但我甚至无法阅读一行输入。我正在使用cin.getline()将用户提供的args读入文本缓冲区,但它不起作用。代码:
int main(int argc, char *argv[])
{
char buffer[1024];
cout << "John's Shell>>";
cin.ignore(17);
cin.getline(buffer, 1024);
cout << buffer << endl;
return 0;
}
我正在尝试使用cin.ignore();忽略我的提示以及换行符。所有这一切都是在按下回车后我得到一个空白输出。永远不会打印缓冲区。我感谢任何帮助
答案 0 :(得分:0)
我正在尝试使用cin.ignore();忽略我的提示
然后不要。你不需要。您从cin
缓冲区获取的输入与发送字符的任何设备cout
分开。
cin.ignore(17)
只等待有17个字符要忽略,因此cin.getline(buffer, 1024)
只能读取剩下的字符(如果有的话)。
您可以使用此函数忽略在输入缓冲区中等待的不需要的字符,例如,当您遇到解析失败时:
int i;
if (cin >> i) {
cout << "You entered: " << i << '\n';
} else {
// input not an integer, get rid of it:
cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n');
}
并且有一种更容易的方式来获取输入线:
std::string line;
std::getline(std::cin, line);
没有逐个错误且没有缓冲区溢出。 std::string
将自动增长以适应任何大小的输入,直至可用内存。