一个关于cin.getline的问题
#include <iostream>
using namespace std;
int main()
{
char c[5][20];
for(int i=0;i<5;i++)
{
cout<<"请输入:"<<endl;
cin.getline(c[i],20); //当输入超过20的时候后面的循环无法阻塞
cin.ignore(100,'\n');
}
for(i = 0;i<5;i++)
cout<<"i"<<i<<" c"<<c[i]<<endl;
return 0;
}
如何解决当输入超过getline所设置长度(20)时后面就无法继续输入,如果有方法请问这个的原理
[解决办法]
做个变量不就行了,超过20置为true,后面判断这个变量为true退出
[解决办法]
cin.getline(c[i],20); //当输入超过20的时候后面的循环无法阻塞
cin.clear();
[解决办法]
1、要先设置忽略字符。
2、要清空cin。
正确的写法,已经测试过:
char c[5][20];
for(int i=0;i<5;i++)
{
using namespace std;
cout<<"请输入:"<<endl;
cin.ignore(100,'\n');//必须在getline前设置读取模式,以便对后面的操作产生影响
cin.getline(c[i],20); //当输入超过20的时候后面的循环无法阻塞
cin.clear();
cin.sync();
}
[解决办法]
我记得在哪看过一个cin的best practice是
用std::getline(cin)而不要用cin.getline
[解决办法]
摒弃cin.getline
使用fgets
[解决办法]
#include <iostream>
using namespace std;
int main()
{
char c[5][20];
for(int i = 0; i < 5; i++) {
cout<<"input: c[" << i << "] :" <<endl;
if (cin.fail()
[解决办法]
cin.bad()) {
cin.clear();
}
cin.seekg(0, ios::end);
cin.getline(c[i], 20);
}
for(int i = 0; i < 5; i++) {
cout << "c[" << i << "] :" << c[i] << endl;
}
return 0;
}