首頁>Club>
5
回覆列表
  • 1 # hupui20650

    我表示沒遇到你的問題,我上傳的檔案裡有程式碼和a.txt b.txt你執行1.exe會發現一起好好的,我這裡貼出程式碼:我要說明是最後一句,將sdin重定向回去控制檯的標準輸入,不然的話system("pause")無法做到暫停的效果。執行效果:

  • 2 # 使用者5189701024573

    當我們求解acm題目時,通常在設計好演算法和程式後,要在除錯環境(例如VC等)中執行程式,輸入測試資料,當能得到正確執行結果後,才將程式提交到oj中。但由於除錯往往不能一次成功,每次執行時,都要重新輸入一遍測試資料,對於有大量輸入資料的題目,輸入資料需要花費大量時間。

    使用freopen函式可以解決測試資料輸入問題,避免重複輸入,不失為一種簡單而有效的解決方法。

    函式名:freopen

    宣告:FILE *freopen( const char *path, const char *mode, FILE *stream );

    所在檔案: stdio.h

    引數說明:

    path: 檔名,用於儲存輸入輸出的自定義檔名。

    mode: 檔案開啟的模式。和fopen中的模式(如r-只讀, w-寫)相同。

    stream: 一個檔案,通常使用標準流檔案。

    返回值:成功,則返回一個path所指定檔案的指標;失敗,返回NULL。(一般可以不使用它的返回值)

    功能:實現重定向,把預定義的標準流檔案定向到由path指定的檔案中。標準流檔案具體是指stdin、stdout和stderr。其中stdin是標準輸入流,預設為鍵盤;stdout是標準輸出流,預設為螢幕;stderr是標準錯誤流,一般把螢幕設為預設。

    下面以在VC下除錯“計算a+b”的程式舉例。

    C語法:

    #include

    int main()

    {

    int a,b;

    freopen("debug\\in.txt","r",stdin); //輸入重定向,輸入資料將從in.txt檔案中讀取

    freopen("debug\\out.txt","w",stdout); //輸出重定向,輸出資料將儲存在out.txt檔案中

    while(scanf("%d %d",&a,&b)!=EOF)

    printf("%d\n",a+b);

    fclose(stdin);//關閉檔案

    fclose(stdout);//關閉檔案

    return 0;

    }

    C++語法

    #include

    #include

    int main()

    {

    int a,b;

    freopen("debug\\in.txt","r",stdin); //輸入重定向,輸入資料將從in.txt檔案中讀取

    freopen("debug\\out.txt","w",stdout); //輸出重定向,輸出資料將儲存在out.txt檔案中

    while(cin>>a>>b)

    cout

    fclose(stdin);//關閉檔案

    fclose(stdout);//關閉檔案

    return 0;

    }

    freopen("debug\\in.txt","r",stdin)的作用就是把標準輸入流stdin重定向到debug\\in.txt檔案中,這樣在用scanf或是用cin輸入時便不會從標準輸入流讀取資料,而是從in.txt檔案中獲取輸入。只要把輸入資料事先貼上到in.txt,除錯時就方便多了。

    類似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt檔案中,這樣輸出結果需要開啟out.txt檔案檢視。

    需要說明的是:

    1. 在freopen("debug\\in.txt","r",stdin)中,將輸入檔案in.txt放在資料夾debug中,資料夾debug是在VC中建立工程檔案時自動生成的除錯資料夾。如果改成freopen("in.txt","r",stdin),則in.txt檔案將放在所建立的工程資料夾下。in.txt檔案也可以放在其他的資料夾下,所在路徑寫正確即可。

    2. 可以不使用輸出重定向,仍然在控制檯檢視輸出。

相關內容

  • 中秋節和大豐收的關聯?
  • 美聯分析湖人交易引援該避免的幾個球星中沃爾第一,小加第二,對此你怎麼看?