我现在正在练习如何使用cin
。我尝试在for循环中使用cin.getline()
来获取连续输入。我试图做的是:
cin
,获取整数NUM和LEN。cin
,获取NUM行不超过LEN个字符。我尝试这样编码:
#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字符并丢弃其他额外输入。如何刷新整个缓冲区?
答案 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;
}
}