getline()

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:09:05
#include <iostream >

using namespace std;

int main()
{
char str[8];
cin.getline(str, 5);
cout <<str <<endl;

cin.getline(str, 5);
cout <<str <<endl;

return 0;
}

第一次输入少于4个字符
下一个cin不会被忽略
但是如果多于四个
第4个CIN就被忽略
第一个COUT 输出前四个字符
第二个COUT 只输出一个空白字符
如果我输入4个字符在缓冲区缓存
然后点击回车键
前四个字符会被第一个CIN.GETLINE()读取
回车被转换成空白字符
缓冲区清空
然后可以进行第2个CINLINE.GET()

但是我如果第一次输入的是5个字符
那么第一个CIN.GETLING()只读取前面四个
还有一个字符和回车被防在缓冲区
应该被第2个CIN.GET()读取啊
会显示第5个字符和空白啊
可是结果第2个CIN.GETLINE()只返回一个空白

如果关闭后面的输入为什么我在两个CIN.GETLINE之间加一个CIN.CLEAR就可以了呢?
也就是清空键盘缓冲去的数据

可是为什么键盘缓冲去的数据不能直接被第2个CIN.GETLINE()读取

还有
为什么CIN.GET()可以

这么改试一试:
fflush(stdin);

///////////////////////////////////////////////
#include <iostream >
using namespace std;

int main()
{
char str[8];
cin.getline(str, 5);
cout <<str <<endl;

fflush(stdin);//加上键盘缓冲区强制清空处理

cin.getline(str, 5);
cout <<str <<endl;

return 0;
}

如果输入行包含的字符数比指定的多,则getline()还会设置失效位,并关闭后面的输入。
所以后面的输入被忽略