系统:Windows 10 IDE:Code::Blocks 16.01
C++中双斜杠//只能注释一行,在这里我没有花时间排版,所以看起来//注释换了行。
预备知识:转义序列
在C++语言中有特殊含义的字符(单引号、双引号、问号、反斜线)是不能直接打印出来的,必须用到转义序列,转义序列以反斜线作为开始。
\n代表换行符,\?代表问号,\'代表单引号,\"代表双引号,\\代表反斜线。想查看更多转义序列请自己去Google。
在用《C++ Primer》学习C++的文件输入输出的部分的时候,会遇到一个疑问:到底怎么打开一个具体的文件?书上只给出了格式,而没给出具体实例,这就导致了自己真正操作的手会遇到问题。
fstream fstrm; //创建一个未绑定的文件流。fstream是头文件fstream中定义的一个类型,fstrm是此类型的一个流对象。
fstream fstrm(s); //创建一个绑定了文件名为s的文件流,s可以是:
//[方法1:一个string类型],或者,[方法2:指向C风格字符串的指针]。
示范一:
ofstream os; //创建了未绑定的os。
string filename_1; //定义一个存储文件路径string类型的对象。
cout<<"请输入文件路径:"<<endl;
getline(cin,filename_1); //读取输入的文件名或路径,存入filename_1。
//用getline而不用cin的好处是,有些文件名可能会带有空格,
//getline读入整行包括空格,而cin遇到空格停止。
cout<<filename_1<<endl;
os.open(filename_1); //这里对应了方法1,即一个string类型。
os<<"abcdefghijklmnopqrstrvwxyz "<<endl;
os.close();
在运行示范一的时候,就可以用户自己输入文件路径,比如输入“E:\abc.txt”,然后系统就会打开文件进行操作。
示范二:
ofstream os;
char filename_1[]=("E\\abc.txt"); //定义一个存储文件路径的字符数组。
//重点!!!注意这里是两个反斜杠\\,不是一个\!!!
cout<<filename_1<<endl;
os.open(filename_1); //这里对应了方法2,即指向C风格字符串的指针。
os<<"abcdefghijklmnopqrstrvwxyz "<<endl;
os.close();
示范三
ofstream os;
os.open("E:\\abc.txt"); //注意这里是两个反斜杠\\,不是一个\!!!
os<<"abcdefghijklmnopqrstrvwxyz "<<endl;
os.close();
示范二和示范三是我写这篇东西的原因。我在自己练习的时候,用示范二、三的方法,在代码中每次只用了单反斜杠\,
ofstream os;
os.open("E:\abc.txt"); //注意这里只有一个反斜杠\!!!运行时不能正确访问路径。
os<<"abcdefghijklmnopqrstrvwxyz "<<endl;
os.close();
编译的时候没有错误,可是程序运行的时候却没有执行我想要的动作,即我在E盘没有找到程序创建文件abc.txt。原因就在于只用了单反斜杠\,在编译的时候这个路径就没办法转换成正确的路径。正确的应该要用双反斜杠\\,这是一个转义序列,编译的时候才会正确地转换成单反斜杠\。
Comments
Post a Comment