为什么程序会在cin之后跳过cin.get()?

时间:2017-07-19 21:08:41

标签: c++

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{
    int x,y;
   char direction ;
    char str1[10];
    cout<<"Please enter the initial position of the bot";
    cin>>x>>y;
    cout << "\n\n";
    cout << "enter initial direction in caps (F-forward,L-left,R-right)";
    cin >> direction;
    //cout << "chosen direction :" << direction ;
    cout << "\n\n";
    cout << "Enter the moves \n(Without space comma seperated in caps eg-F,L,L" ;
    cin.get(str1,10);
    cout << "entered moves :" << str1 << endl ;

    return 0;
}

执行后: $ ./intern 请输入bot1 2的初始位置

以大写字母(F-forward,L-left,R-right)f

输入初始方向

输入动作 (没有空格逗号分隔,例如-F,L,Lentered move:

KARPAGAVALLI @ Ashwin~ $

1 个答案:

答案 0 :(得分:1)

这里有一个问题:在最后一个

之后
cin >> direction;

流缓冲区中有一个额外的换行符'\ n',由下一个

读取
cin.get(str1,10);

表示它没有被执行的“错觉”。实际上,str1只是空字符串。

解决方案是使用

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

cin.get(str1,10)之前清除流(请注意,您必须#include <limits>)。