首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2014-01-01 
一个关于cin.getline的问题#include iostreamusing namespace stdint main(){char c[5][20]for(int i

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

热点排行