C++ for循环中的cin.getline()快把我累死了

C++ for循环中的cin.getline()快把我累死了,c++,cin,C++,Cin,我现在正在练习如何使用cin。我尝试在for循环中使用cin.getline()来获得连续的输入。我想做的是: 使用cin,获取整数NUM和LEN 在for循环中使用cin,获取不超过LEN个字符的NUM行 我试着这样编码: #include<iostream> using namespace std; int main(void){ char arr[100][100]; int i, j; int NUM, LEN; cout <&l

我现在正在练习如何使用
cin
。我尝试在for循环中使用
cin.getline()
来获得连续的输入。我想做的是:

  • 使用
    cin
    ,获取整数NUM和LEN
  • 在for循环中使用
    cin
    ,获取不超过LEN个字符的NUM行
  • 我试着这样编码:

    #include<iostream>
    
    using namespace std;
    
    int main(void){
    
        char arr[100][100];
        int i, j;
        int NUM, LEN;
    
        cout << "Input the NUM: " << endl;
        cin >> NUM;
    
        cout << "Input the LEN: " << endl;
        cin >> LEN;
    
        cout << endl;
        cin.ignore();
    
        for(i=0;i<NUM;i++){
            cin.getline(arr[i],LEN+1);
    
        }
    
        cout << "Your Input: ";
        for(i=0;i<NUM;i++){
            cout << "row" << i << " :: " << arr[i] << endl;
        }
    
    }
    
    #包括
    使用名称空间std;
    内部主(空){
    字符arr[100][100];
    int i,j;
    int NUM,LEN;
    库特数;
    库特伦;
    cout这个怎么样:

    int main(void){
    
        char arr[100][100];
        int i, j;
        int NUM, LEN;
    
        cout << "Input the NUM: " << endl;
        cin >> NUM;
    
        cout << "Input the LEN: " << endl;
        cin >> LEN;
    
        cout << endl;
        cin.ignore();
    
        char temp[100];
        for(i=0;i<NUM;i++){
            cin.getline(temp,100);
            strncpy(arr[i],temp,LEN);
            arr[i][LEN]= 0;
        }
    
        cout << "Your Input: ";
        for(i=0;i<NUM;i++){
            cout << "row" << i << " :: " << arr[i] << endl;
        }
    }
    
    int main(无效){
    字符arr[100][100];
    int i,j;
    int NUM,LEN;
    库特数;
    库特伦;
    
    你为什么不做cin.getline()并阅读所有内容,然后切掉LEN的每一个字符?太好了!你真的像个天使,我没想到会有这么快的反应…我真的很感激。但我可以问你更多吗?1.我仍然不确定你的答案如何。嗯…我用了cin.getline()在我的代码中也是如此,但是缓冲区中的多余字符把它搞砸了。cin.getline()在代码中工作得很好吗,因为你读了100个字符?虽然我喜欢你的方式,但是没有任何方法可以在每次cin.getline()之后刷新缓冲区(以便擦除多余的字符)?2.arr[I][LEN LEN=0;意思是?只是为了确保它是字符串的结尾?说起来很荒谬,但即使有一天我成为一名优秀的程序员,我怎么能忘记你:DHi再次,我尝试按照我的版本工作的顺序回答,因为我读了100个字符?是的,更准确地说,它工作是因为它尝试读取尽可能多的字符,并读取所有输入的字符用户,但如果用户键入101个字符,我们将再次出现错误。我不知道是否可以从cin直接刷新所有超过固定限制的字符,但如果您发现,我很乐意知道。最后,arr[I][LEN]=0是必需的,因为否则数据可能会变脏,cin.getline()将0放在接收字符数组的末尾,但当我们从接收的字符中删除除数据外的数据时,我们也会删除getline()放在那里的0,因此我们必须再次放置0。