1.使用原始的cin进行输入;
哨兵字符: 程序利用某个特殊字符来检测何时停止读取文本输入。
while(ch != ‘#')
{
cout<<ch;
++count;
cin>>ch;
}
这里使用了#作为哨兵字符!
2.使用cin.get(char)进行补救;
通常逐个字符读取输入的程序需要检查每个字符,包括空格,制表符和换行符.
cin.get(ch);
while(ch != '#')
{
cout<<ch;
++count;
cin.get(ch);
}
文件尾文件
检测文件尾(EOF)
1.EOF结束输入
cin方法检测到EOF时,将设置cin对象中一个指示EOF条件的标记.设置这个标记后,cin将不读取输入,再次调用cin也不管用.这是对于文件输入而言的.而对于键盘输入,有可能使用模拟EOF来结束循环,但稍后要读取其他输入.cin.clear()方法可能清除EOF标记,使输入继续进行.不过,在有些系统中,按Ctrl+Z实际上是结束输入和输出,而cin.clear()将无法恢复输入和输出.
2.常见的字符输入做法
每次读取一个字符,直到遇到EOF的输入循环的基本设计如下
cin.get(ch);
while(cin.fail()==false)
{
......
cin.get(ch);
}
程序;
#include<iostream>
int main()
{
using namespace std;
int ch;
int count = 0;
while((ch=cin.get())!=EOF)
{
cout.put(char(ch));
++count;
}
cout<<endl<<count<<" characters read\n";
return 0;
}
嵌套循环和二维数组
#include<iostream>
const int Cities=5;
const int Years=4;
int main()
{
using namespace std;
const char * cities[Cities]=
{
"Gribble City",
"Gribbletown",
"New Gribble",
"San Gribble",
"Gribble Vista"
};
int maxtemps[Years][Cities]=
{
{95,99,86,100,104},
{95,97,90,106,102},
{96,100,940,107,104},
{97,102,89,107,104}
};
cout<<" Maximum temperatures for 2000-2005\n\n";
for ( int city =0; city<Cities; ++city)
{
cout<<cities[city]<<":\t";
for ( int year = 0; year<Years; ++year)
cout<<maxtemps[year][city]<<"\t";
cout<<endl;
}
return 0;
}
总结:
C++提供了3种循环:for循环,while循环和do-while循环。
许多程序都逐字节的读取文本输入或文本文件,istream类提供了多种可以完成这种工作的方法,如果是一个char变量,则下面的语句
cin>>ch;
将输入中的下一个字符读取到ch中,不过将忽略空格,换行符和制表符,下面的成员函数调用
cin.get(ch);
读取输入中的下一个字符,不管该字符是什么都将其存储在ch中,成员函数cin.get()返回下一个输入字符
包括空格,换行符和制表符,因此可以这样使用: ch=cin.get();
cin.get(ch)成员函数调用通过返回转换成false的bool值来指出已达到EOF,而cin.get()成员函数调用则通过返回EOF值来指出已达到EOF,EOF是在文件iostream中定义的.
嵌套循环是循环中的循环,是和处理二维数组.