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