sophia_hxw

人生有三恨,一恨鲫鱼有刺,二恨海棠无香,三恨红楼未完!----------张爱玲
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从标准输出和读入

Posted on 2016-07-14 16:33  sophia_hxw  阅读(195)  评论(0编辑  收藏  举报

&1 函数cin

cin通过使用空白(空格、制表符和换行符)来定字符串的界。这意味着cin在读取
字符数组输入时只读取一个单词,读取该单词后,cin将该字符串放一数组中,并自动
结尾添加空字符。另外,cin也没有很好的控件输入的字符数,即输入字符数大于数组
大小的情况没有处理。

 

&2 源代码-cin

const int size = 20;
char name[size];
char pl[size];//program language 
cout << "Enter your name:";
cin >> name;
cout << "Enter your favorite program language:";
cin >> pl;
cout << "Hello " << name << ", your favorite program language is " << pl << endl;

 

&3 cin.getline函数

cin.getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。该函数有
两个参数。第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数(包括
空字符),cin.getline()成员函数在读取指定数目的字符或遇到换行符时停止读取,需要注意
的是,cin.getline()丢弃了换行符。

 

&4 源代码-cin.getline

cout << "Enter your name:";
cin.getline(name, size);
cout << "Enter your favorite program language:";
cin.getline(pl, size);
cout << "Hello " << name << ", your favorite program language is " << pl << endl;

 

&5 get函数

get()函数有好几种变体,其中有一种与getline()完全相同的参数,但该函数不再读取并丢
弃换行符(不读取意味着换行符还在输入队列中)

 

&6 源代码-get()

cout << "Enter your name:";
cin.get(name, size);
cout << "Enter your favorite program language:";
cin.get(pl, size);
cout << "Hello " << name << ", your favorite program language is " << pl << endl;

 

&7 get()函数的困扰

发现&6中代码并不好使,原因是由于第一次调用后,换行符将留存输入队列中,因此第二次调用时看
到的第一个字符为换行符。因此get认为已经到达行尾,而没有发现任何可读取的内容。get()
(不带任何参数的变体)可以读取下一个字符(包括换行符)。

 

&8 改进源代码

cout << "Enter your name:";
cin.get(name, size).get();
cout << "Enter your favorite program language:";
cin.get(pl, size).get();
cout << "Hello " << name << ", your favorite program language is " << pl << endl;

 

&9 混合输入字符串和数字

int age = 0;
char address[size] = { 0 };
cout << "Enter your age:";
cin >> age;
cin.get();
cout << "Enter your address:";
cin.getline(address, size);
cout << "your age is " << age << ", your address is " << address << endl;