设为首页 加入收藏

TOP

15.1.4 流式输入(3)
2013-10-07 15:35:23 来源: 作者: 【 】 浏览:68
Tags:15.1.4 流式 输入

15.1.4  流式输入(3)

putback()

putback()和unget()一样,允许在输入中流反向移动一个字符。区别在于putback()方法将从参数接收的字符放回流中:

  1. char ch1;  
  2. cin >> ch1;  
  3. cin.putback(ch1);  
  4. // ch1 will be the next character read off the stream.  

peek()

通过peek()方法可预览调用get()返回的下一个值。再拿滑槽的隐喻打比方,可以想象为查看一下滑槽,但是不把值取出来。

peek()非常适合于在取出一个之前需要预先查看这个值的场合。例如下面的代码实现了get- ReservationData()函数,允许名字中出现空白字符,但使用的是peek()而不是unget():

  1. void getReservationData()  
  2. {  
  3. string guestName;  
  4. int partySize = 0;  
  5. // Read letters until we find a non-letter  
  6. char ch;  
  7. cin >> noskipws;  
  8. while (true) {  
  9. // 'peek' at next character  
  10. ch = cin.peek();  
  11. if (!cin.good())  
  12. break;  
  13. if (isdigit(ch)) {  
  14. // next character will be a digit, so stop the loop  
  15. break;  
  16. }  
  17. // next character will be a non-digit, so read it  
  18. cin >> ch;  
  19. guestName += ch;  
  20. }  
  21. // Read partysize  
  22. cin >> partySize;  
  23. cout << "Thank you '" << guestName 
  24. << "', party of " << partySize << endl;  
  25. if (partySize > 10) {  
  26. cout << "An extra gratuity will apply." << endl;  
  27. }  
  28. }  
  29.  
  30. 代码取自Peek\Peek.cpp  

getline()

从输入流中获得一行数据是一个非常常见的需求,所以有一个方法能完成这个任务。getline()方法用一行数据填充字符缓冲区,数据量最多至指定大小。指定的大小中包括\0字符。因此,下面的代码最多从cin中读取kBufferSize-1个字符,或者读到行尾为止:

  1. char buffer[kBufferSize];  
  2. cin.getline(buffer, kBufferSize);  
  3.  
  4. 代码取自Getline\Getline.cpp  

调用getline()的时候,这个方法从输入流中读取一行,读到行尾为止。不过,行尾字符不会出现在字符串中。注意,行尾序列和平台相关。例如,行尾序列可以是\r\n、\n或\n\r。

有一个版本的get()执行的操作和getline()一样,区别在于get()把换行序列留在输入流中。

还有一个用于C++(www.cppentry.com) string的名为getline()的函数。这个函数定义在<string>头文件和std名称空间中。这个函数接受一个流引用,一个string引用以及一个可选的分隔符作为参数:

  1. string myString;  
  2. std::getline(cin, myString);  
  3.  
  4. 代码取自Getline\Getline.cpp  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.1.4 流式输入(4) 下一篇15.1.4 流式输入(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)