1,循环文本输入之cin

cPP_重置

【注,cin省略空格和换行符,因此这些字符将不会回显,也不会被纳入到count统计计数】

发送给cin的输入前期会被缓存,直到操作者输入回车键,被缓存的输入数据才会被发送给程序处理;

2,cin.get(char)

逐个字符读取输入的程序需要检查每个字符,包括空格,制表符和换行符,cin系统函数所属的istream类(在iostream中定义)中包含一个能够满足这种要求的成员函数,具体地说,成员函数cin.get(ch)读取输入的下一个字符(即使他是空格),并将其付给ch;

cPP_键盘输入_02

C中类似于cin.get(ch)函数是会修改参数的值的,但是我们又说回来了,修改变量的值传入的需要是变量的内存地址&var,这种类似的规律是在C中的,那么在C++呢,调用cin.get()传递的是ch,而不是&ch,这里面有个 关于引用的问题,

3,文件尾条件

在实际的开发过程中,使用诸如#符号来表示输入介绍很令人满意,因为有可能这些符号是字符串输入中的某一个合法的字符输入,如果输入来自于文本的读取,可以使用文件尾检测(eof)

C++输入工具盒操作系统协同工作,来检测文件尾这种信息告知程序;

读取文件中的信息,cin等系统函数键盘输入;

重定向,允许用文件替换键盘输入;

很多操作系统都允许通过键盘来模拟文件尾条件,在UNIX中,可以在行首按下ctrl+D

windows中在命令行下可以在任意位置按Ctrl+Z和enter;

很多PC环境将Ctrl+Z视为EOF,

 检测到EOF后,cin将2位(eofbit和failbit)都设置为1,通过成员函数eof()来查看eofbit是否被设置,如果检测到EOF,则cin.eof()将返回bool值true,否则返回false,同样cin.fail();

cin.get()锁屏,直到可以读取为止;

cin.clear()重置输入流;

cPP_键盘输入_03

系统支持的EOF

linux/unix及类系统 自编类cat程序

cPP_键盘输入_04

在字符读取循环中根据设定的循环条件;

总结,EOF结束输入(键盘模拟EOF或文本读取)

cin方法检查到EOF时,将设置cin对象中一个EOF条件的标记,设置这个标记后,cin将不读取输入,再次调用cin也不读取,对于文本读取有道理,因为程序不应该读取超出文件尾的内容

对于键盘输入,有可能使用模拟EOF来结束输入,但稍后要读取其他输入,cin.clear()方法清除EOF标记,使输入继续.

常见的字符输入

每次读取一个字符,直到遇到EOF的输入循环;

cin.get(ch);

while (cin.fail() == false) // test for EOF

{

  ...; // do stuff

  cin.get(ch) //attempt to  read another char

}

!运算符可以将true切换为false或将false切换为true,

whilel (!cin.get()) //while input has not failed;

方法cin.get(char)的返回值是一个cin对象,然而,istream类提供了一个可以将istream 对象(cin);

转换为bool值的函数,当cin需要bool值的地方(while循环的测试条件中);

while(cin) //while input is successful

while(cin)比!cin.fail()或!cin.eof()更通用,因为while(cin)可以检测到其他失败的原因,磁盘故障等;

while(cin.get(ch)) //while input is successfully

(确定结束条件,对条件进行初始化,更新条件)

int ch;

cin.get()代替cin.get(char);

cout.put()代替cout;

EOF代替cin.fail();

char ch;

cin.get(ch);

while (cin.fail() == false) //test for EOF

{

  cout<<ch;

++count;

cin.get(ch);

}

int ch; //for compatibility with EOF value

ch = cin.get();

while (ch != EOF)

{

  cout.put(ch); //cout.put(char(ch)) for some implementations

  ++count;

  ch = cin.get();

}

cin.clear()重置输入流

cin.get()锁屏;

for (int row = 0;row < 4;row++)

{

    for (int col = 0;col < 5; ++col)

        cout<<maxtemps[row][col] <<"\t";

    cout<<endl;


//循环的过程,循环row = 0,循环col 5 次;

每循环完一个row 和5次col后再进入到row 1 同样循环5次col;

}

cPP_键盘输入_05