for循环中的cin.getline()正在杀死我

时间:2015-10-10 19:25:45

标签: c++ cin

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

  1. 使用cin,获取整数NUM和LEN。
  2. 在for循环中使用cin,获取NUM行不超过LEN个字符。
  3. 我尝试这样编码:

    #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;
        }
    
    }
    

    坦率地说,如果我只输入有效值,这样可以很好地工作......但是当我在某些行中只输入比LEN更多的字符时,它真的很糟糕。

    我尝试了很多东西......例如cin.clear()cin.ignore(limit of buffer header <limits> say, '\n')fflush(stdin)等等......我想如果在C中有fflush(stdin)的替代方案,它会工作......

    我只想为每一行只获得第一个LEN字符并丢弃其他额外输入。如何刷新整个缓冲区?

1 个答案:

答案 0 :(得分:0)

这个怎么样:

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;
    }
}