Chinaunix首页 | 论坛 | 博客
  • 博客访问: 906598
  • 博文数量: 73
  • 博客积分: 2689
  • 博客等级: 少校
  • 技术积分: 897
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-07 19:39
个人简介

一个有目标,为自己的未来努力奋斗的人

文章分类
文章存档

2015年(9)

2014年(2)

2013年(6)

2012年(11)

2011年(33)

2010年(12)

分类: C/C++

2011-01-15 22:24:53

先做下声明,本篇文章完全是读书笔记,格式、逻辑及流畅性无法得到保证,望阅读本文的读者见谅!阅读本文时,权且将其作为经验杂谈来读就行了。

1、cin的缺点之一

在使用cin读入字符串时,它将以空格、换行符、制表符来定字符串的界。因此,当你输入的字符串中有空格(必须含有空格)时,那么cin将不能按照你的意志来工作。这时该怎么办?别急,先人们已经为你提供了唯美的解决方案了。在istream类中(如cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。不同的是,getline()将丢弃末尾的换行符,而get()将换行符保留在输入序列中。要调用这两种方法,可使用cin.getline()和cin.get()。它们有相同的参数列表(对于get()的其中一个变体而言)。第一个参数是待读入字符串将要存放的首地址,第二个参数是最大可读入的字符串的长度。

另外,get还有其他变体,如cin.get()。不带参数的方法,可以单个字符逐一读取。(需要使用新版本的编译器,老版本的好像没有实现不带参数的get()方法,使用时应采取get(ch)这种调用方式)。cin在读取字符时,将忽略其中的空格、制表符和换行符。

注意:若是调用get()从输入缓冲区中读取数据,那么每次读取后都要负责将该行最后的回车采用某种方式将其从缓冲区中取出,以免影响程序的行为,此时我们可以采用将两个类成员拼接起来的方法解决这个问题(只是一种建议):cin.getline(addr, size).get()。而使用getline()方法时,不必考虑这些。同样,使用getline()是也可以采用两个类拼接的方式同时读取多个输入串,如cin.getline(addr1,size1).getline(addr2,size2)。

2、cin的缺点之二:混合输入数字和字符串的问题

请看如下程序段:

#include <iostream>

using namespace std;

int main(int argc, char **argv) {
      cout<<"What year was your house built?\n";
      int year;
      cin>>year;
      cout<<"What is its street address?\n";
      char address[80];
      cin.getline(address, 80


FUCK!!!我就修改了下文件名,保存时内容全丢了,只剩下10%,悲剧啊!!!本来是想把一些经验共享给大家的,结果......
阅读(1006) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-08 14:31:11

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com