基本的cout / cin问题

时间:2011-01-29 21:10:29

标签: c++ stdin

cin >> Input; {
 if(Input == "a")
  Position = "first";
 else if(Input == "b")
  Position = "second";
 else if (Input == "c")
  Position = "third";
 else if(Input == "Stop")
  break;
 }

cin>>输入我还有两个cin部分。由于某种原因,它会跳过Name的getline。在我cin>>之后输入它显示名称:状态:然后执行状态的获取。

  cout << "Name: ";
   getline(cin, Name);
   if(Name == "Stop")
   break;

 cout << "Status: ";
  getline(cin, Status);
  if(Status == "Stop")
  break;

3 个答案:

答案 0 :(得分:1)

我认为它应该是这样的:

 cin.getline(whatever);
 cin.ignore(1, '\n');

请参阅,当您从stdin读取一些文本时,字符串结束由\n确定(默认情况下)。当您在控制台窗口中按Return键时,将跳过此符号,但它已存在。因此,当您尝试读取下一个字符串时,它会遇到之前忘记 \n并终止读取返回空字符串。

阅读this了解详情。

答案 1 :(得分:1)

问题是大多数输入操作会在输入缓冲区中留下换行符(但不是getline()),更多信息是here
在你的情况下这一行:

cin >> Input; {

会留下/n,后面会提到:

getline(cin, Name);

快速解决方案:

cin >> Input;替换为getline(cin, Input);

答案 2 :(得分:1)

cin >> somevar留下了换行符。无论somevar是什么类型,即使它是一个std :: string,该行语句的末尾也不会被该语句读取。因此,当您到达名称部分时,您会读到somevar行的结尾,这显然是空的。在尝试读取名称之前扔掉一个getline,它应该没问题。