输入缓冲区未清除

时间:2015-07-14 03:50:42

标签: c++ visual-c++

我正在使用c ++的cin对象来解决问题。我目前使用microsoft visual studio 2013终极版作为我的IDE。

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    char inp[20], inp2;
    cout<<"input\t";
    cin>>inp;
    cout<<"input char";
    inp2=getchar();
    cout<<inp<<endl<<inp2;
}

问题是从第一个cin行读取输入后,getchar正在读取一个新的liine charector。即cin在完成输入后在缓冲区中留下一个新的行字符。 getchar读取nw line charector所以它根本不接受用户的任何输入。

4 个答案:

答案 0 :(得分:0)

您可以在getchar之后添加其他cin >> inp来阅读换行符。那么下面代码的逻辑就是正确的。

答案 1 :(得分:0)

处理完第一个输入后,您可以使用cin.ignore()忽略该行的其余部分。

cin>>inp;

// Ignore the rest of the line.
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

cout<<"input char";
inp2=getchar();

答案 2 :(得分:0)

如果您想完全接受用户的所有输入,例如阅读整行

std::string input, input2;
std::cout<<"input\t";
std::getline(std::cin, input);

也许值得一试。

答案 3 :(得分:0)

使用gets()读取字符串。使用另一个getchar()不是一个好的编码实践:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    char inp[20],inp2;
    cout<<"input\t";
    gets(inp);
    cout<<"input char";
    inp2=getchar();
    cout<<inp<<endl<<inp2;
}