c++ primer plus 的第五章
循环和文本输入
- for循环和while循环都是入口条件循环,do while循环是出口条件循环
1. 使用原始的cin输入
- 程序经常要使用循环来读取来自键盘的文本输入,则必须有办法知道何时停止读取,一种方法是选择某个特殊的字符(如“#”)——有时被称为哨兵字符,将其作为停止标记.
- cin在读取char值时将忽略空格和换行符
2. 使用cin.get(char)
- cin.get(ch)将检查每个字符,包括空格、制表符、换行符。
3. 文件尾的条件
- 哨兵字符的做法很难令人满意,因为它可能就是合法输入。
- 如果输入来自文件,则可以使用检测文件尾(EOF)来结束输入。很多操作系统都允许通过键盘来模拟文件尾条件。
- cin中有两个方法来模拟文件尾条件,分别是cin.eof()、cin.fail(),两个函数的返回值都是bool类型的。
- 当遇到EOF时,cin.eof()返回ture,否则返回false。
- cin.fail()是用来判断一个流是否异常,如果failbit被设置,则返回true,否则返回false,EOF也会使failbit被设置,所以也可以用来检测EOF,但cin.fail()比cin.eof()功能更强。
4. 常见的字符输入做法
- 基本的设计:
cin.get(ch);
while(cin.fail() == false)
{
...
cin.get(ch);
}
- 改进设置:
- while(!cin.fail())
- while(cin)//比!cin.fail()和!cin.eof()更通用,因为它可以检测到其他失败原因,如磁盘故障
- while(cin.get(ch))
2016.10.03
控制台输入的常用代码(仅对不合法输入给出了代码):
for(int i = 0; i < limit; i++)
{
cout << "Enter value #" << (i + 1) << ": ";
cin >> temp;
if (!cin) //if enter the bad input
{
cin.clear();
while (cin.get() != '\n')
continue;
cout << "Bad input: input process terminated." << endl;
break;
}
else
...
}
2016.10.29