如何让用户输入两次以上?

时间:2014-06-28 02:32:47

标签: c++ loops input cin getline

我是C ++的新手。我试图了解如何利用C ++公共输入(cin)。我正在尝试编写一个程序来检查句子的字符数和输入句子中的元音数量。我已成功完成它,但当我尝试让代码再次运行时会出现问题。当它再次运行时,它不再允许第二次输入。我的简化代码如下。

#include <iostream>
#include <string>

using namespace std;

int main()
{
  char rerun = 'y';
  string input;
  int a_counter, e_counter, i_counter, o_counter, u_counter;
  a_counter = e_counter = i_counter = o_counter = u_counter = 0;

  do
  {
    getline(cin, input); // asking user to input a sentence
    // already written code here that uses for loop to do the vowel counting
    // already written code to use the cout command to output the result
    cin >> rerun; // ask to type 'y' or 'n' to continue, assume user only types y or n
  } while (rerun == 'y');
} //end of main function

当运行该程序时,首先允许用户输入一个句子,并在输入和显示结果后,要求用户输入'y'或'n'。如果答案是y,代码将不允许放入句子(getline是),并且所有内容的显示结果(a_counter ...)都是0并且直接跳回到请求放置'y'或'n'。有人能帮助我吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

当行

cin >> rerun;
执行

'\n'保留在输入流中。下次运行时

getline(cin, input);

你得到一个空行。

要解决此问题,请添加

cin.ignore();

之后

cin >> rerun;

这是你的循环应该是什么样的:

do
{
  getline(cin, input);
  cin >> rerun;
  cin.ignore();
}while (rerun == 'y');

答案 1 :(得分:0)

此处发生的问题是,您在输入\n后输入yn被视为rerun的字符输入,因此条件变为false。

让我们试着了解您的代码中发生了什么...... 假设您正在提供输入

  

ABCDE(\ n)的

     

y(\ n)

     

ABC(\ n)的

字符串在遇到\n时终止。所以

  

输入=&#34; abcde&#34; (这里没问题)

现在,当您在y(\n)中输入rerun时,其状态变为true,但问题从此处开始...... \n现在已被{{1} }} ..即

  

重新运行=&#39; y&#39;

  

输入=&#39; \ n&#39;(只打印一条没有任何内容的行。input

现在只要你输入一些东西,假设它会进入cout就不会真正发生但实际上它进入input(因为{ {1}}已包含rerun),如果不是input,则会对\n进行评估..希望我很清楚

这是另一种方法

y