C++ 它跳过了第二个getline()函数?

C++ 它跳过了第二个getline()函数?,c++,getline,C++,Getline,我一直在想为什么它不读取我的第二个getline()函数。第一个getline(cin,input)可以很好地获取分区的输入数据。我在获取工作数据时也做了同样的工作,但它不起作用。没有错误或任何东西。它只是跳过了那条线。任何帮助都将不胜感激。多谢各位 #include <iostream> #include <string> #include "memory.h" #define show(a) std::cout << #a << ": " &

我一直在想为什么它不读取我的第二个getline()函数。第一个getline(cin,input)可以很好地获取分区的输入数据。我在获取工作数据时也做了同样的工作,但它不起作用。没有错误或任何东西。它只是跳过了那条线。任何帮助都将不胜感激。多谢各位

#include <iostream>
#include <string>
#include "memory.h"

#define show(a) std::cout << #a << ": " << (a) << std::endl

using std::cin;
using std::cout;
using std::endl;

int main(void)
{
    //Variables
    int MEM_SIZE = 0;

    vector<int> partition_input;
    vector<int> job_input;


    while(true)
    {
        //INPUT PARTITION DATA
        while(true)
        {
            char confirm;           
            string input;
            int temp;               //Temporary variable to store extracted data 
            int num_part = 0;       //Iterator to check partition size and memory, and partition limits
            int check_size = 0;

            cout << "Please enter the memory size and partitions in the following format: \n";
            cout << "1000 250 250 250 250 \n";
            cout << "> ";

            getline(cin, input);        //The whole of user input is stored in variable "line"
            istringstream os(input); //"line" is passed to stringstream to be ready to be distributed

            while(os >> temp)
            {
                partition_input.push_back(temp);
                check_size += partition_input[num_part];
                num_part++;
            }


            //sets the first input to MEM_SIZE
            //AND deletes it from the partition vector
            MEM_SIZE = partition_input[0];
            partition_input.erase(partition_input.begin(), partition_input.begin()+1);

            check_size -= MEM_SIZE;

            cout << "Memory size: " << MEM_SIZE << endl;
            cout << "# of Partitions: " << partition_input.size() << endl;
            cout << "Partition Sizes: ";

            for(int i = 0; i < partition_input.size(); i++)
                cout << partition_input[i] << ' ';
            cout << endl;

            cout << "Correct? (y/n) ";
            cin >> confirm;

            cout << endl << endl;
            if(confirm == 'n')
                continue;

            //Checks the total partition size and the total memory size
            if(!(MEM_SIZE >= check_size)) 
            {
                cout << "ERROR: Total partition size is less than total memory size." << endl;
                system("pause");
                continue;
            }
            //Check if it exceeded the max number of partition limit
            if((num_part-1) >=5)
            {
                cout << "ERROR: You have entered more than the allowed partition(5). Please try again. \n";
                system("pause");
                continue;
            }

            break;
        }

        //START INPUT JOB DATA

        do
        {
            string input2;
            cout << "Please enter the size of each job in the following format." << endl;
            cout << "300 100 200 400" << endl;
            cout << "> ";

            //*******************
            //IT SKIPS THESE TWO LINES
            getline(cin, input2);
            istringstream oss(input2);  
            //*******************

            int j;
            while(oss >> j)
                job_input.push_back(j);

            for(int i = 0; i < job_input.size(); i++)
                cout << job_input[i] <<  ' ';
            break;
        }while(false);
        //END OF INPUT JOB DATA


        break;
    }

    Memory A1(MEM_SIZE, partition_input.size(), partition_input, job_input.size(), job_input);

    //A1.FirstFit();
    //    A1.BestFit();
    //    A1.NextFit();
    //    A1.WorstFit();

    //system("pause");
    return 1;
}
#包括
#包括
#包括“memory.h”
#定义show(a)std::cout问题在于:

        cout << "Correct? (y/n) ";
        cin >> confirm;
cout>确认;
这将从输入中读取确认字符不是'\n'字符。因此,下一个readline将只读取该换行符

从输入读取时,最好不要将std::getline()和运算符>>混合使用

我将代码更改为:

        cout << "Correct? (y/n) ";
        std::string confirmLine;
        std::getline(cin, confirmLine);

        cout << endl << endl;
        if(confirmLine == "n")
            continue;
cout问题在于:

        cout << "Correct? (y/n) ";
        cin >> confirm;
cout>确认;
这将从输入中读取确认字符不是'\n'字符。因此,下一个readline将只读取该换行符

从输入读取时,最好不要将std::getline()和运算符>>混合使用

我将代码更改为:

        cout << "Correct? (y/n) ";
        std::string confirmLine;
        std::getline(cin, confirmLine);

        cout << endl << endl;
        if(confirmLine == "n")
            continue;

cout这是一个正确的诊断,但不能提供有用的解决方案。解释
cin会更有帮助。忽略
@BenVoigt:因为我认为问题在于混合使用std::getline()和operator>>我会取消operator>>的使用。我已经更新了答案,以显示我将如何修复它。这是一个正确的诊断,但它没有提供一个有用的解决方案。解释
cin会更有帮助。忽略
@BenVoigt:因为我认为问题在于混合使用std::getline()和operator>>我会取消operator>>的使用。我已经更新了答案,以显示我将如何修复它。