cin.get()和cin.get(ch)之间的区别

每次读取一个字符,直到遇到EOF的输入循环的基本设计如下:
cin.get(ch); //attempt to read a char
while(cin.fail()==false)  //test for EOF
{
.........
  cin.get(ch);   //attempt to read another char
}
可以在上述代码中使用一些简捷方式:
while(!cin.fail())    //while input has not failed
cin.get(char)方法的返回值是一个cin对象。不过,istream类提供了一个可以将istream对象(如cin)转换为bool值的函数;当cin出现在需要bool值得地方(如在while循环的测试条件中)时,该转换函数将被调用。另外,如果最后一次读取成功了,则转换得到的bool值为true,否则为false.这意味着可以将上述while测试改为:
while(cin)   //while input is successful
这比!cin.fail()或!cin.eof()更通用,因为它可以检测到其它失败原因,如键盘故障。
此外,由于cin.get(char)的返回值为cin,因此可以将循环精简成这种格式:
while(cin.get(ch))   //while input is successful
{
.......
}


另一种cin.get()版本
不接受任何参数的cin.get()成员函数返回输入中的下一个字符。即可以这样使用:
ch=cin.get()
该函数的工作方式与C语言中的getchar()相似,将字符编码作为int值返回;而cin.get(ch)返回一个对象,而不是读取的字符。同样也可以使用cout.put()函数来显示字符:
cout.put(ch);
该函数的工作方式类似C语言中的putchar(),只不过其参数类型为char,而不是int。

使用cin.get()读取输入:
int ch;
ch=cin.get();
while(ch!=EOF)
{
  cout.put(ch);
  ++count;
  ch=cin.get();
}

-------------------------------------------------------------------------------------------------------------------------------------------------------------
cin.get()和cin.get(ch)之间的区别:

属性                                       cin.get(ch)                                         ch=cin.get()
传递输入字符的方式                         赋给参数ch                                         将返回值赋给ch
用于字符输入时函数返回值                   istream类对象(执行bool转换后为true)              int类型的字符编码
到达EOF时函数的返回值                      istream类对象(执行bool转换后为false)              符号常量EOF

关于如何选择:
使用字符参数的版本更符合对象的方式,因为其返回值是istream对象。这意味着可以将它们拼接起来。如,下面的代码将输入中的下一个字符读入到ch1中,并将接下来的一个字符读入到ch2中:
cin.get(ch1).get(ch2);
函数cin.get(ch1)返回一个cin对象,然后便可以通过该对象调用get(ch2)。
get()的主要用途是能够将stdio.h的getchar() putchar()函数转换为iostream的cin.get()和cout.put()方法。


附:
许多程序都逐字节的读取文本输入或文本文件,isteam类提供了多种可完成这种工作的方法,如果ch是一个char变量,则下面的语句:cin>>ch;
将输入的下一个字符读入到ch中。不过,它将忽略空格、换行符和制表符。下面的成员函数调用:
cin.get(ch);
读取输入中的下一个字符,而不管该字符是什么,并将其存储到ch中。
成员函数调用cin.get()返回下一个输入字符,包括空格、换行符、制表符,因此,可以这样使用它:
ch=cin.get();
cin.get(char)成员函数调用通过返回转换为false的bool值来指出已到达EOF,而cin.get()成员函数调用则通过返回EOF值来指出已到达EOF,EOF是在文件iostream中定义的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值