循环和文本输入

循环和文本输入

  • 一个简单任务:逐字符地读取来自文件或键盘的文本

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()测试放在读取后。
原文地址:https://www.cnblogs.com/adtxl/p/11477870.html