ex12_24中ignore函数的作用
csbdong opened this issue · 4 comments
csbdong commented
代码如下:
#include <iostream>
int main()
{
// need to tell the size.
std::cout << "How long do you want the string? ";
int size{0};
std::cin >> size;
char *input = new char[size+1]();
std::cin.ignore(); //*********************************************//
std::cout << "input the string: ";
std::cin.get(input, size+1);
std::cout << input;
delete [] input;
// Test: if longer than the array size, we will lost the characters which are out of range.
}
输入测试数据 5[Enter]sssss 测试无误,但是删去cin.ignore()后,测试发现输入5之后就不再接受输入。
ignore()默认的参数是1,EOF表示清空缓冲区中的一个字符。但是在输入5之后敲击回车原则上是无影响的,因为cin>>size,中的cin>>该操作符是根据后面变量的类型读取数据。输入结束条件 :遇到Enter、Space、Tab键。*对结束符的处理 *:丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab) 。
删去cin.ignore()的条件下:
此处输入5后,缓冲区内无残留数据,因此我认为不加cin.ignore()也是可以的,但是实践表明不行,不知道是为什么?
pezy commented
因为cin>>size,中的cin>>该操作符是根据后面变量的类型读取数据。输入结束条件 :遇到Enter、Space、Tab键。*对结束符的处理 *:丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab) 。
这个"丢弃原则" 是哪里规定的?
pezy commented
一个测试建议:
在 std::cin.ignore();
前面加上一句 char c = std::cin.get();
看看这个 c
是什么.
而这个 c
便是当前输入缓冲里的最后一个字符了.
csbdong commented
@pezy 关于ignore查阅一些技术博客看到的。http://blog.csdn.net/xuexiacm/article/details/8101859