- 论坛徽章:
- 0
|
大家好,我是个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*! |
|