C ++在cin.getline上跳过

时间:2015-01-26 10:18:47

标签: c++

我的程序输入字符有问题

#include <iostream>
using namespace std;

int  main()
{
int choise;
char word[81];


cin >> choise;
cout << "enter the word:" << endl;
cin.getline(word, 81);

return 0;
}
视觉工作室打开输入​​&#34;选择&#34; 但跳过cin.getline(如果我用gets_s替换它就一样)。

我试着写 cin.get();在&#34; getline&#34; ...之前 但是程序没有得到第一个字符 (如果我把&#39; aa&#39;它得到&#39; a&#39;) 我能做什么? 感谢

2 个答案:

答案 0 :(得分:1)

因为你为程序输入了一个接受你为choice输入的整数的换行符,所以不会从缓冲区中提取该换行符,而是在下一个输入操作中读取它。 getline调用会读取剩余的换行符,并对此感到满意。

有几种方法可以解决您的问题。第一个也是最明显的是使用std::string作为word变量,然后使用普通输入运算符>>,因为它将跳过前导空格(包括换行符)。

另一种解决方案是将输入流告诉ignore,直到并包含换行符。链接参考有一个如何做到这一点的例子。

答案 1 :(得分:0)

输入整数后按Enter键,此输入输入将保留在缓冲区中,并用作getline的下一个输入,计算机假定您已完成。 在getline语句之前添加此行并重新编译它。 cin.ignore()