【C++】文件輸入輸出總介紹


Should I Go On Blogging?

freopen

我也不知道爲什麼要讀作free openfree\ open(到底是空閒打開還是免費打開或者自由打開)

con

先說一個CCF最恨的東西:#include<con>沒錯,就是那個無限編譯的東西(禁賽三年好虛啊)
放一下編譯效果
正常編譯:
正常編譯
con編譯:
con
沒錯那個任務管理器就是拿來關CodeBlocksCodeBlocks
(卡到不能手動點紅叉叉)

正式的講一下

爲什麼要講con?提醒大家NOIP不要用,小心禁賽
其實,每個自己運行的C/C++C/C++ 代碼中都可以加上這兩句(經測試,OJ(至少LGOJLGOJ)上千萬不能用)

freopen("CON","r",stdin);
freopen("CON","w",stdout);

其它文件流

  1. stdinstdin。就是你打比賽的時候不打爆零的東西。標準輸入流。例見下。
  2. stdoutstdout。同上。就是打開標準文件輸入輸出。標準輸出流。
  3. stderrstderr。標準錯誤流。其實…沒什麼用…下面也有小說明。

栗子

stdin和stdout的栗子

#include<cstdio>
#include<conio.h>//只是用着玩,NOIP會CE
int main() {
    getch();//還沒有打開文件輸入,會在小黑板上敲一下再繼續
    freopen("a+b.in","r",stdin);
    printf("Welcome To A+B Problem");//還沒有打開文件輸出,會輸出在小黑板上
    freopen("a+b.out","w",stdout);
    scanf("%d %d",&a,&b);
    printf("%d",a+b);//這兩個都是在文件裏面進行的
};

stderr的栗子
其實…沒啥用…(一個錯誤流能有啥用)
好吧,之前介紹過CON,其實這東西和CON差不多,也可以打開標準輸入輸出
如下,可以直接交到A+b Problem

#include<cstdio>
int a,b;
int main()
{
    freopen("testdata.in","r",stderr);
    freopen("testdata.out","w",stderr);
    scanf("%d%d",&a,&b);
    printf("%d",a+b);
}

沒有多的了

fopen

其實我是相信大家對freopen是比較熟悉的,所以主要介紹一下fopenfopen
fopenfopen,就是f(ile) openf(ile)\ open,用於在C語言中打開文件(以下代碼皆爲C語言)
頭文件:#include<stdio.h>
這裏僅給出一般的爲了輸入輸出的用法
exampleexample(爲什麼又是A+B):

#include<stdio.h>
FILE* fin,fout;//定義文件指針
int main() {
    fin=fopen("testdata.in","rb");
    fout=fopen("testdata.out","wb");
    int a,b;
    fscanf(fin,"%d%d",&a,&b);//從輸入文件指針中讀入
    fprintf(fout,"%d",a+b);//輸出到輸出文件指針中
    fclose(fin); fclose(fout);//關閉輸入輸出文件,可省略
}

文件指針就代表文件,相應的必須用fscanf和fprintf
別以爲fopen很難用,其實它改成標準輸入輸出很方便,如下

#include<stdio.h>
FILE* fin,fout;//定義文件指針
int main() {
    fin=fopen("testdata.in","rb");
    fout=fopen("testdata.out","wb");
    fin=stdin; fout=stdout;
    int a,b;
    fscanf(fin,"%d%d",&a,&b);//從輸入文件指針中讀入
    fprintf(fout,"%d",a+b);//輸出到輸出文件指針中
    //必須省略fclose
}

其實還挺快的

fstream

f(ile) streamf(ile)\ stream文件流就不多說了……
頭文件:#include<fstream>+using namespace std
額,然後,可以用這種方式定義一個文件流

#include<fstream>
using namespace std;
ifstream fin;
ofstream fout;
int main() {
    fin.open("testdata.in");
    fout.open("testdata.out");
    int a,b;
    fin>>a>>b;
    fout<<a+b;//這兩句是文件操作
    printf("A+B Problem 666");//這一句是輸出在小黑板上的
    cout<<"A+B Problem 666";//這一句是輸出在小黑板上的
}

還有,平常使用string會用getline,就要換成

string s;
getline(fin,s);

Over!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章