Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;GetLine()问题,命令行程序_C++_Iostream_Getline_Cin - Fatal编程技术网

C++ C++;GetLine()问题,命令行程序

C++ C++;GetLine()问题,命令行程序,c++,iostream,getline,cin,C++,Iostream,Getline,Cin,我正在为我的编程类编写这个程序,它有一堆愚蠢的约束,比如我必须使用嵌套的if-else语句,并且我必须使用cin.getLine()来获取玩家名称。它应该抓取每个球员的名字并计算他们的平均击球率 这不是整个程序,而是我出错的部分。当我在命令提示符下运行此命令时,我可以很好地接收第一个名称,但在这之后,第二个cin.getline()不会读取任何输入。建议 #include <iostream> #include <iomanip> #include <string&

我正在为我的编程类编写这个程序,它有一堆愚蠢的约束,比如我必须使用嵌套的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;
                  }
         }
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符名称1[100],名称2[100],名称3[100];
int numBat,numHit;
双avg1、avg2、avg3;
//获得玩家1的平均值
不能麻木;
如果(numBat<0 | | numBat>25)
{

cout在
getline
之后,当您使用

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

使用


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

cin.clear(); // clear the buffer
cin.sync();
如果不起作用,请尝试以下操作:

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

我正要将此标记为家庭作业…但已经有5个标记。lol:/有必要设置家庭作业标记吗?我觉得这会阻止人们帮助我解决问题…为什么我不在我的第一个cin.getline()上这样做呢?它没有问题。你确实需要在第一个“getline”之后完成。这就是你遇到问题的原因。当某人输入他们的名字后,你没有输出换行符,所以无论你接下来写什么,都在同一行上。我要说的是,程序的上半部分运行良好&正如预期的那样,没有上面的解决方案。为什么?请行动实际上,现在CIN根本不工作,它不读取任何输入。实际上,现在CIN根本不工作,它不读取任何输入,我们必须使用getLine,不知道为什么?Winrar就是你!ignore和getLine()有什么区别?
CIN.clear()
不清除缓冲区,但清除
istream的错误位
cin.ignore(256, '\n'); // ignore the endline and char(256)