循环和文本输入

循环和文本输入#

  • 使用原始的cin进行输入
    • 使用哨兵字符作为停止标记。
    • 例如遇到#停止。
    • 这种方式cin将忽略空格和换行符
    • 发送给cin的输入被输入缓冲,这意味着只有在用户按下回车键后,整个字符序列将被发送给程序。
char ch;
cin>>ch;
while(ch != '#')
{
    cout<<ch<<endl;
    cin>>ch;
}
  • 使用cin.get(char)
    • cin.get(ch)读取输入中的下一个字符(即使是空格),并将字符赋给ch。
    • 用下面的代码代替上面的代码,输出将会包含空格。
char ch;
cin.get(ch);
while(ch != '#')
{
    cout<<ch<<endl;
    cin.get(ch);
}
  • 文件尾条件
    • 上述以某个字符为结尾的方式并不是对所有情况都适用。
    • 如果输入来自文件,那么可以采用检测文件尾(EOF)的方式。
    • 有些系统的命令行可以模拟文件尾。
    • 假设windows中有一个gofish.exe可执行程序和一个fishtale文件。则输入
    • gofish < fishtale
    • 表示从fishtale中获取输入。
    • 可以使用cin.eof()和cin.fail()检测是否到达文件尾。如果到达则返回true。
    • 如果监测到EOF,那么cin将不读取输入,再次调用cin也不会读取。使用cin.clear(),可以清除EOF标记,使得输入继续进行。
    • istream提供了一个可以将istream对象转变尾bool类型的函数。当cin出现在需要bool类型的时候,该函数将会被调用。如果最后一次读取成功,返回true,否则返回false。该方式更加通用,可以检测到其他的输入失败的原因。例如:磁盘故障。
char ch;
cin.get(ch);
while(!cin.fail())
{
    cout<<ch<<endl;
    cin.get(ch);
}
//更加简洁的方式
char ch;
while(cin.get(ch))
{
    cout<<ch<<endl;
}
  • cin.get()方式和cout.put(char(ch))
    • cin.get()返回输入中的下一个字符的字符编码转为int返回。
    • 当输入到达EOF时,cin.get()将返回一个用符号常量EOF表示的特殊值。该常量在iostream中定义。通常EOF被定义为-1。
    • 赋值语句的结果为做操作符的值。
int ch;
ch = cin.get();
while(ch != EOF)
{
    ch = cin.get();
    cout.put(char(ch));
}
//更简洁的写法
int ch;
while((ch = cin.get()) != EOF)
{
    cout.put(char(ch));
}
posted @ 2019-12-02 23:11  yangzixiongh  阅读(149)  评论(0编辑  收藏  举报