C++ C++;,在for循环中使用getline和cin.ignore()时出现问题。getline将跳过for循环中的第二次迭代

C++ C++;,在for循环中使用getline和cin.ignore()时出现问题。getline将跳过for循环中的第二次迭代,c++,C++,我一直在想为什么它不读取我的第二个getline()。第一个getline(cin,line)工作正常。没有错误或任何东西。它只是通过循环中的第二次迭代跳过该行。任何帮助都将不胜感激。多谢各位 int main() { int n = 0; std::cin >> n; std::vector <int> arrNumbers; int requestLine = 0; st

我一直在想为什么它不读取我的第二个getline()。第一个getline(cin,line)工作正常。没有错误或任何东西。它只是通过循环中的第二次迭代跳过该行。任何帮助都将不胜感激。多谢各位

    int main() {
    
        int n = 0;
        std::cin >> n;
        std::vector <int> arrNumbers;
        int requestLine = 0;
        std::string line;
        double procent = 0;
    
        if (n > 99) {
            std::cout << "wrong range of number" << std::endl;
            exit(-1);
        }
    
        for (int i = 0; i < n; i++) {
            int num;
            std::cin >> num;
            arrNumbers.push_back(num);
        }
    
        std::cin >> requestLine;
        for (int i = 0; i < requestLine; i++) {
    
            std::cin.ignore(256, '\n');
            std::getline(std::cin, line);
                    
            
            int del1 = line.find_first_of(' ', 0);  // first position of space
            int del2 = line.find_first_of(' ', del1 + 1); // second position of space
    
            std::stringstream indexStr(line.substr(0, del1)); // position
            std::stringstream numberStr(line.substr(del1, del2)); // number
            std::stringstream repeatsStr(line.substr(del2)); // repied
    
            int index, number, repeats;
    
            indexStr >> index; 
            numberStr >> number; 
            repeatsStr >> repeats;
    
            arrNumbers.insert(arrNumbers.begin() + index - 1, repeats, number);
    
            del1 = 0;
            del2 = 0;
            
            
        }
    
        for (const int& number: arrNumbers) {
            sort(arrNumbers.begin(), arrNumbers.end());
        }
    
        
        return 0;
    }
intmain(){
int n=0;
标准:cin>>n;
std::向量arr数;
int requestLine=0;
std::字符串行;
双procent=0;
如果(n>99){
std::cout num;
arrNumbers。推回(num);
}
std::cin>>请求行;
for(int i=0;i>指数;
数字TR>>数字;
重复sstr>>重复;
插入(arrNumbers.begin()+索引-1,重复,编号);
del1=0;
del2=0;
}
用于(常量整数和编号:ARR编号){
排序(arrNumbers.begin(),arrNumbers.end());
}
返回0;
}

您是否验证程序是否进入循环?
检查其前面的“n”值。

是否尝试过将
std::cin.ignore()
行移出循环,并在上一个
std::cin
的正下方移动?我还认为您的
std::stringstream
知识可能需要一些调整。一个stringstream将很好地为所有三个变量提供数据。
std::cin.ignore(256,'\n')
call将忽略行尾之前的所有字符。在循环的第一次迭代中,它会吃掉
std::cin>>requestLine
之后剩下的EOL。在循环的第二次迭代中,它吃掉了整个第二行输入。@sweenish谢谢,你解决了我的问题,我同意stringstream。谢谢你的帮助,问题是因为cin.ignore()。