首先,C++不直接处理输入输出,而是通过定义在标注库中的类型来进行处理这些IO,分别为:
1,iostream处理控制台的IO
2,fstream处理命名文件的的IO
3,stringstream完成内存string中的IO
IO库的处理比较简单,没有什么特别难的地方,这里就简单地提出一些要点,供大家阅读和我自己平常使用的作为参考。
1,IO作为函数参数或者返回值使用的时候一般用&引用进行传递,最主要的原因是不用&作为传递,参数会发生实参给形参进行拷贝操作,IO对象不能进行拷贝操作,一般使用以下形式,person是一个表示身高体重的类,打印一个人(wwh)的身高体重。
void print(ostream& out, person man)
{
out << "hello" << endl;
out << "man.hight" << "cm" << endl;
out << "man.weight" << "kg" << endl;
}
int main()
{
print(cout, wwh);
return 0;
}
2,对于空格和回车的理解,回车相当于将输入(cin)缓冲区中的字符全部输入到变量中。
3,从别的地方看到的getline()的理解。
#include <string>
#include <iostream>
using namespace std;
int main()
{
char a;
int b;
float c;
string str;
cin>>a>>b>>c>>str;
cout<<a<<" "<<b<<" "<<c<<" "<<str<<endl;
string test;
getline(cin,test);//不阻塞
cout<<"test:"<<test<<endl;
system("pause");
return 0;
}
从键盘输入:[回车][回车][回车]a[回车]5[回车]2.33[回车]hello[回车],输出结果是:
从结果可以看出,cin>>对缓冲区中的第一个换行符视而不见,采取的措施是忽略清除,继续阻塞等待缓冲区有效数据的到来。但是,getline()读取数据时,并非像cin>>那样忽略第一个换行符,getline()发现cin的缓冲区中有一个残留的换行符,不阻塞请求键盘输入,直接读取,送入目标字符串后,再将换行符替换为空字符’\0’,因此程序中的test为空串。原文来自:https://blog.csdn.net/k346k346/article/details/48213811
4,养成文件IO操作的良好习惯。
ifstream inf(filename);
if(inf) //判断是否打开文件
{
//文件输入流的操作
}
else
{
cout << "can't open " << filename << endl;
}
5,C++ primer 289页告诉我聚合类(就是我们C语言说的结构体struct)不能进行类内初始化。
我是too cold,我们下次再见。