读书人

一个关于cin.getline的有关问题

发布时间: 2014-01-01 18:12:08 作者: rapoo

一个关于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;
}

VC上(除报i的重定义这个错外)和msys上测过 可是Codeblocks上不行(不过也有可能是我的CodeBlocks有问题, 我的CodeBlocks确实有问题, 但在这个问题上有没有问题就不知道了)
上面的仅供参考, 本人对I/O流这块操作确实不太了解, 相关中文资料也少
不过平时有问题可以看看这个网站 http://cplusplus.com/

读书人网 >C++

热点推荐