#include<iostream>
int main()
{
using namespace std;
char arr[4];
cin.get(arr,4);
cin.get();
float n;
cin>> n;
cout<< arr<< n<< endl;
cin.get();
return 0;
}
关于这段代码错误(在输入的地方直接按回车就出错)的解释:
cin.get(arr, 4)这个成员函数在输入空行(即一个字符也不输入,包括空格,直接回车就是空行了)的时候,会设置failbit,这个标志没有清除,后面的输入都被阻塞了,因此全都略过。清除一下failbit就OK了(就是说用cin.Clear();恢复输入,不是清空输入流吗???),
这种情况是没有清空输入流的,只是清除了失效位,如果要清除错误的输入,还要用一个循环来清除错误输入。具体见 Pro6-14清楚错误输入 。
就是在cin.get(arr,4);后面加一句cin.clear();
流的状态,以及及时刷新缓冲区。记住这2点,输入流一般就不会有问题了
还有一种输入阻断的情况是:当输入字符串可能比分配的空间长,那么getline()和get()将把余下的字符流在输入队列中,而getline()还会设置失效位,并关闭后面的输入。