cin.getline无法正常工作

时间:2014-02-23 21:50:19

标签: c++ visual-c++-2010

我正在编写一个小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();忽略我的提示以及换行符。所有这一切都是在按下回车后我得到一个空白输出。永远不会打印缓冲区。我感谢任何帮助

1 个答案:

答案 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将自动增长以适应任何大小的输入,直至可用内存。