循环和文本输入
- 一个简单任务:逐字符地读取来自文件或键盘的文本
1. 使用原始的cin进行输入
使用某个特殊字符——有时被称为哨兵字符,将其作为停止标记。
- ** cin 在读取char值时,与读取其它基本类型一样,cin将忽略空格和换行符。因此输入中的空格没有被回显,也没有被包括在计数内。更为复杂的是,发送给cin的输入被缓冲。这意味着只有在用户按下回车键后,他输入的内容才会被发送给程序。**
- 程序代码如下:
void textin1()
{
char ch;
int count = 0;
cout << "Enter characters; enter # to quit:
";
cin >> ch;
while (ch != '#')
{
cout << ch;
++count;
cin >> ch;
}
cout << endl << count << " characters read
";
}
2. 使用cin.get(char)进行补救
cin.get(char)读取输入中的下一个字符(即使它是空格),并将其赋给变量ch。
- 程序代码如下:
void textin2()
{
char ch;
int count = 0;
cout << "Enter characters; enter # to quit:
";
cin.get(ch);
while (ch != '#')
{
cout << ch;
++count;
cin.get(ch);
}
cout << endl << count << " characters read
";
}
3. 文件尾条件
如果输入来自文件,则可以使用一种功能更强大的技术——检测文件尾(EOF)。
- 检测到EOF后,cin将两位(eofbit和failbit)都设置为1。
可以通过成员函数eof()来查看eofbit是否被设置;如果检测到EOF,则cin.eof()返回true,否则返回false.
如果eofbit或failbit被设置为1,则fail()成员函数返回true,否则返回false。注意,eof()和fail()方法报告最近读取的结果;也就是说,它们在事后报告,而不是预先报告。因此,应将eof()和fail()测试放在读取后。