免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1572 | 回复: 0
打印 上一主题 下一主题

[C++] C++基础之(三)-----流的概念---cin [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-03 14:52 |只看该作者 |倒序浏览
大家好,我是个C++菜鸟级选手,我想把把我学习C++的体会采用系列的方式发出来,主要是一些C++的基本概念,我觉得学好C++任何时候都离不开基础知识,也许很多大虾对这些不屑一顾,但我希望能给初学者能带来一点帮助,同时希望各位大虾也能顶顶,特别是一些好的建议,不要保留哦!希望在这能起个抛砖引玉的作用!谢谢

C++基础-----流的概念---cin

下面我通过一些例子讲讲 cin 的用法。

cin 为各种各样的参数重载了提取运算符(>;>;),这些参数包括 int&、short&、long&、float&、char&、char* 等。

int TestNum;

cout<<"lease enter a number:";

cin>;>;TestNum;

上面的例子中,TestNum 为整型变量,所以调用函数

istream & opreater>;>;(int &   //对提取运算符号(>;>;)的整型变量重载。

以此类推,其他如:istream & opreater>;>;(char & 就是对字符变量的重载。

注意:重载的概念以后的文章中将会进一步介绍!其实 C++ 中的很多实现(如标准函数的实现)都是一些 C++ 基本概念的实现的结果!如果大家

有兴趣,可以多看看一些标准库中的类的实现代码,其实很多库函数我门同样也可以写,所以 C++ 给了我门一个非常强大而灵活的工具,实现我门

所需要的功能。


串的输入:

cin 还可以处理字符型的指针(char *)变量;因此,可以建立一个字符缓冲区并使用 cin 来填充它;

char MyName[50];

cout<<"Enter your name";

cin>;>;MyName;

如果输入 shushenlin, 则MyName 就用字符s,h,u,s,h,e,n,l,i,n,\0 来填充。\0 为空字符,cin 自动嗲用一个空字符来结束字符串。

上面的例子中,如我们试图写 shu shen lin 时,那么我们得到的结果并不是我门想要的,而只输出 shu ,因为shu shen 中的空格就算是输入结

束。



那么下面我们解决怎么可以输入多个字符---即讲cin 函数get(),getline(),ignore()的使用。

1。使用没有参数的 get().

#include<iostream.h>;

int main()
{

   char chcin;

   while((chcin==cin.get())! = EOF )  //EOF 为文件结束符。
    {
      
      cout<<"chcin:"<<chcin<<endl;       //
      
     }
   
   cout<<"\n  Over! \n";

   return 0;

}
注意:上面的程序DOS中采用  Ctrl+z 结束, unix 上使用 Ctrl+d.读者可以自己运行测试。
如果输入 :hello
结果     :
chcin:h
chcin:e
chcin:l
chcin:l
chcin
( Ctrl+z )
Over

2。使用没带参数的 get() .

#include<iostream.h>;

int main()
{

   char a,b,c;
  
   cout<<"Enter the char:";

   cin.get(a).cin.get(b).cin.get(c);//cin 返回值为另一个istream对象。相当于cin>;>;a;cin>;>;b;cin>;>;c 分别输出。

   cout<<"a:"<<a<<"\nb:"<<b<<"\nc:"<<c<<endl;

   return 0;      

}


运行结果:

Enter the char: shu

a:s
b:h
c:u

3.冲标准输入读取字符串

#include<iostream.h>;


int main()
{

   char StrOne[256];

   char StrTwo[256];

   cout<<"Enter string one:";

   cin.get(StrOne,256);      //get()中的第一个参数为要填充的缓冲区变量。第二个参数为其大小,
                             //get()最多能读取255个字符,最后一个保存空字符 (\0)
                             //缺省的第三个参数为换行符。

   cout<<"StrOne:"<<StrOne<<enl;

   cout<<"Enter string two:";

   cin>;>;StrTwo;

   cout<<"StrTwo:"<<StrTwo<<endl;

   return 0;   

}

输出结果:

Enter string one: shu shen lin
StrOne: shu shen lin
Enter string two: shu shen lin
StrOne: shu

从上面结果可以看到,get(StrOen,256) 能取得缓冲区中255个字符。

而StrTwo 输入的时候遇到空格,就算结束输入,保存 shu 和空格符。

4。使用getline()

getline()与get()功能上基本相同,不同点是:get()不丢弃换行符(\n),仍然把它保存在输入缓冲区中,getline()读取换行符并将起抛弃。程序

测试请读者自己测试。

5。使用ignore(),peek(),putback();

cin.ignore(80,'\n');

其含义是:忽略换行符(\n)qi前面80个字符。

peek()函数只是查看,并不提取下一个字符。

putback()则向输入流中插入一个字符。

#include<iostream>;

int main()
{

   char chcin;
   
   cout<<"Enter a string:";

                         //.....start while first............//
   while(cin.get(chcin)) //取得流中的字符
    {                  
      
                          //.....start if............//
                          //if 的功能是把 '!',则换成 '*'
     if(chcin == '!')     

         cin.putback('*');  
         
     else
         
         cout<<chcin;

                        //......end if..............//
                        //.....start while second............//
                        // second while功能是删除 '#'
        
        while(cin.peek() == '#')
        
            cin.ignore(1,'#');   
                       //.....end while first............//

    }                 
                      //.....end while first............//
  
   return 0;
}


输出结果:
Enter a string:Hello!You # are my # good friend!I love you!

Hello*You are my good friend*Ilove you*!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP