循环与文本输入
循环完成的一项最常见最重要的任务:逐字符地读取来自文件或键盘的文本。
cin对象支持三种不同模式的单字符输入,其用户接口各不相同。
使用原始的cin进行输入:
通过循环来读取键盘的文本输入,则必须有办法停止读取。
一种方法是选择某个特殊的字符(哨兵字符)来作为停止标记。
cin有自身的特点:
- 忽略空格和换行符
- 发送给cin的输入被缓冲,需要按下回车键。
使用cin.get(char)补救,它读取输入的下一个字符(即使他是空格)。但输入仍被缓冲。
但在C语言中,这个函数存在错误,应使用&,而不是直接使用。
cin对象的三种不同模式的单字符输入:
cin.get() cin.get(ch) cin.get(name,ArSize);name为数组名,ArSize为读取的字符数。
文件尾条件(检测文件尾EOF)
检测到EOF后,cin将两位(eofbit和failbit)都设置为1,可以通过eof()和fail()来查看是否被设置,如果设置则返回true,否则false。他们都是事后报告,需要放在读取之后,注意fail()可用于更多实现中(常用)。
当EOF后会被标记,再次调用cin将不再读取,需要用cin.clear()来清除EOF标记。
也C语言中的getchar()和putchar()。
嵌套循环和二维数组
二维数组更像一个表格——既有数据行又有数据列。
像下面的声明:
int maxtemps [4][5];
这意味着maxtemps是一个包含4个元素的数组,每个元素由5个整数组成。
可以使用嵌套的for循环来显示数组元素。
for (int row=0;row<4;row++)
{
for (int col=0;col<5;col++)
{
cout<<maxtemps[row][col];
}
cout<<enl;
}
初始化二维数组:
例:
int maxtemps[4][5]=
{
{96,100,87,101,105},
{96,98,91,109,105},
……,
……
};
二维数组的规则可以参考一维数组。