std::format后面不能接std::endl吗?


更新日期:2022-11-24 11:59:00
1、c++ ifstream 文件输入流 打开方式 既然不能用iftream对象进行写入操作,为
std::ios::out 和 std::ios::in是作用于流的内部缓冲区的,分别指定内部缓冲区支持输出和输入操作,C++的输入输出流实际的IO操作都是由内部缓存区实现的,输入流和输出流用的内部缓冲区都是同一个类型(std::streambuf)。
你问题中的代码可能实现的就是这个效果,即同时支持输入和输出。ifstream没有提供输出的接口,所以你不能使用ifstream进行输出。
看看下面的代码:
#include<fstream>#include<iostream>#include<string>intmain(){//创建输入流,std::ios::out指定内部缓冲区支持输出操作,std::ios::trunc避免文件不存在的情况以及截断文件。std::ifstreaminput{"test.txt",std::ios::in|std::ios::trunc|std::ios::out};if(input){//保存std::cout的内部缓冲区.autooldRdbuf=std::cout.rdbuf();//将input的内部缓冲区与std::cout共享.std::cout.rdbuf(input.rdbuf());//输出字符串,注意这里的字符串将输出到input打开的文件中.std::cout<<"Hello,thismessagecamefromstd::cout!"<<std::endl;//读取刚才输出的字符串std::stringline;//一定要设置文件指针,因为输出操作会改变文件指针.input.seekg(0,std::ios::beg);if(std::getline(input,line)){//恢复std::cout原先的内部缓冲区std::cout.rdbuf(oldRdbuf);//输出读取的字符串std::cout<<line<<std::endl;}}system("pause");}
上面的代码实现了input和std::cout共享内部缓冲区,由于input创建的时候添加了std::ios::out标记,所以std::cout后续的输出操作都可以成功实现,如果去掉这个标记,std::cout的输出操作就会失败!
建议不要写这种代码,容易让别人疑惑,如果需要同时输出和输出,应该是用std::fstream流。
2、C++ 文件流中,std::ifstream in (filename); in>>(*this); 这是什么意思啊?求教。。。
std::ifstreamin(filename);//文件输入流in>>(*this);//把文件里的内容存入(*this)对象中,前提是这个类重载了>>运算符
3、c++读取txt出现redeclaration of 'std::ifstream fin'和'std::ifstream fin' previously declared here
#include<iostream>#include<fstream>#include<assert.h>#include<windows.h>usingnamespacestd;intmain(){doublea;doubleb;doublec;system("dir\Rick\R.G.O.S.Download/A:D/B>update.txt");{//这里ifstreamfin("\Rick\R.G.O.S.Download\update.txt");while(!fin.eof()){fin>>a;fin.close();}}//这里{//这里ifstreamfin("update.txt");fin>>b;fin.close();c=b-10*a+30;if(c>=0){system("delupdate.txt/Q/F");ofstreamfout("update.txt");fout<<c;fout.close();system("startupdate.bat");}}//这里}
已修改
4、C++运行时出错,请大侠指导:error C2275: "std::ifstream": 将此类型用作表达式非法
ifstream是一种类型,C++在调用函数的时候,参数不用写类型的。所以你这里只要写成vector<string> svec=store_file(is);
就可以了。
C++在函数的声明和定义中才需要写参数的类型。
5、如何使用std ifstream读取一个带有宽字符串路径的二进制文件
比如int,也许有四个字节,我们只需要把它的地址换成char×,并且写入4个字节就行了,读出也是一样的。代码[cpp] view plain copy#include <iostream>#include <fstream>using namespace std;
int main(int argc, char** argv){
int a[5] = {1,2,3,4,5};int b[5];
ofstream ouF;ouF.open("./me.dat", std::ofstream::binary);ouF.write(reinterpret_cast<const char*>(a), sizeof(int)*5);ouF.close();
ifstream inF;inF.open("./me.dat", std::ifstream::binary);inF.read(reinterpret_cast<char*>(b), sizeof(int)*5);inF.close();
for (int i = 0; i < 5; i++){cout << b[i] << endl;}return 0;}

我要回帖

更多关于 std::end 的文章

 

随机推荐