【问题标题】:C++ GetLine() Problem, Command Line ProgramC++ GetLine() 问题,命令行程序
【发布时间】:2011-11-26 12:46:51
【问题描述】:

我正在为我的编程课编写这个程序,它有一堆愚蠢的约束,比如我必须使用嵌套的 if else 语句,我必须使用 cin.getLine() 来获取玩家姓名。它应该获取每个球员的名字并计算他们的击球率。

这不是整个程序,而是我遇到错误的部分。当我在命令提示符下运行它时,我可以很好地接收到第一个名称,但之后第二个 cin.getline() 不会读取任何输入。有什么建议吗?

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
    char name1[100], name2[100], name3[100];
    int numBat, numHit;
    double avg1, avg2, avg3;

    // Get Average for Player 1
    cout << "What's Your Name? ";
    cin.getline(name1, 100);

    cout << "How many times have you been at bat? ";
    cin >> numBat;

    if(numBat < 0 || numBat > 25)
    {
        cout << "ERROR ::: Number of Times at Bat Cannot Be Less Than 0 or Greater Than 25. Run Program Again." << endl;
        return 0;
    }
    else
    {

        cout << "How many times have you hit the ball? ";
        cin >> numHit;

        if(numHit < 0)
        {
            cout << "ERROR ::: Number Hit Cannot Be Less Than 0. Run Program Again." << endl;
            return 0;
        }
        else
        {
            // Calculate Average for Player 1
            avg1 = numHit / numBat;

            // Get Average for Player 2
            cout << "What's Your Name? ";
            cin.getline(name2, 100);

            cout << "How many times have you been at bat? ";
            cin >> numBat;

            cout << "How many times have you hit the ball? ";
            cin >> numHit;
                  }
         }
}

【问题讨论】:

  • 正要将此标记为作业...但是已经有 5 个标记。大声笑
  • :/ 需要有作业标签吗?我觉得这会阻止人们帮助我解决我的问题......

标签: c++ iostream getline cin


【解决方案1】:

我认为这是一个缓冲区问题。尝试在第二个getline 之前刷新cin

cin.clear(); // clear the buffer
cin.sync();

如果这不起作用,请尝试以下操作:

cin.ignore(256, '\n'); // ignore the endline and char(256)

【讨论】:

  • Winrar 就是你! ignore 和 getline() 有什么区别?
  • cin.clear() 不清除缓冲区但清除istream 的错误位
【解决方案2】:

getline之后,需要使用cout &lt;&lt; endl;输出换行符。

【讨论】:

  • 为什么我不必在我的第一个 cin.getline() 上这样做?它通过没有问题
  • 您确实需要在第一个“getline”之后执行此操作。这就是你有问题的原因。在此人输入他们的姓名后,您不会输出换行符,因此您接下来写的任何内容都在同一行。
  • 我的意思是程序的上半部分运行良好,并且在没有上述解决方案的情况下按预期运行。这是为什么呢?
  • 其实现在 CIN 根本不起作用,它没有读取任何输入。
【解决方案3】:

当你使用时

   cin >> numBat;

它不读取换行符,因此下一个 cin.getline() 将读取它并继续。

使用

cin >> numBat;
cin.ignore(80,'\n');

【讨论】:

  • 其实现在CIN根本不起作用,它没有读取任何输入,我们必须使用getLine,不知道为什么?
猜你喜欢
  • 2014-12-06
  • 2020-07-28
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多