2011-10-25 195 views
-1

所以即時編寫C++程序,它從輸入文件中獲取一個整數,將其與2相乘並將其輸出到輸出文件中。所以代碼是 -C++輸入和輸出文件

#include <stdio.h> 
#include <iostream> 
using namespace std; 

int main() { 
    int n; 
    FILE * inFile; 
    FILE * outFile; 
    inFile = fopen ("reiz.in","r"); 
    outFile = fopen ("reiz.out","r+"); 
    fscanf (inFile, "%s", n); 
    int m = n * 2; 
    fprintf (outFile, "%n", n); 
    fclose (inFile); 
    fclose (outFile); 
    return 0; 
} 

但是有什麼不對。在reiz.in文件中有2號,在運行程序之後它應該在reiz.out中輸出4,但它只是顯示不發送錯誤。我的腳本究竟有什麼問題? 最好的問候, Y2oK

編輯1:好的,現在它看起來像這樣 -

#include <stdio.h> 
#include <iostream> 
using namespace std; 

int main() { 
    int n; 
    FILE * inFile; 
    FILE * outFile; 
    inFile = fopen ("reiz.in","r"); 
    outFile = fopen ("reiz.out","r+"); 
    fscanf (inFile, "%d", &n); 
    int m = n * 2; 
    fprintf (outFile, "%d", m); 
    fclose (inFile); 
    fclose (outFile); 
    return 0; 
} 

但仍給人同樣的運行reiz.exe文件時,請不要發送錯誤,它不寫輸出文件上的任何內容 我現在有點困惑,不知道選誰作爲最佳答案,所以我會選擇獲得最多「+1」的人。但是,多虧了!

+0

你還是不及格N'的'的*地址*給'的fscanf()'。幫你個忙,用'fstream'代替! –

+0

我已經編輯了這個問題,所以你可以複製它完成。 – trojanfoe

+1

@ Y2ok:請使用耐心和盡職調查。你有很好的答案。你用'我無法編譯','同樣不發送'(?),'仍然沒有幫助'和'同樣的問題:/'來解僱他們。這意味着你顯然沒有嘗試更正 - 正確。人們會用盡耐心,然後「仍然沒有幫助」將成爲現實:**你**沒有幫助 – sehe

回答

5

這是一個C程序(除了using namespace std;)。在C++中,你應該使用流和格式化的I/O,這樣的:

#include <fstream> 

int main() { 
    std::ifstream input_file("reiz.in"); 
    int n; 
    input_file >> n; // read one integer 
    std::ostream output_file("reis.out"); 
    output_file << n * 2 << std::endl; // calculate n * 2 and write the result 
             // to a file. std::endl adds a newline and 
             // flushes the buffer 
    return 0; 
} 
+0

我無法用dev-C++編譯器編譯你的程序。 – Y2ok

+0

@ Y2ok:請扔掉那堆垃圾編譯器。如果您在Windows上,請使用VisualStudio Express。如果在Linux上,使用GCC。 –

+0

嗯,我正在從這個網站學習C++ - http://www.cplusplus.com/reference/clibrary/cstdio/,有沒有網站。如果這不是C++是什麼?我在哪裏可以學習C++,如果它不是C++? – Y2ok

0

傳遞的n地址fscanf()(它是一個整數,而不是字符串):

fscanf (inFile, "%d", &n); 

所有的東西是有點長的牙齒,除非你實際上是寫「C」。看看iostream類的家庭,如果你正在寫'C++'

+0

同樣的問題:/ – Y2ok

+0

你沒有通過'n'的地址嗎:'fscanf (inFile,「%d」,n);' – trojanfoe

+0

嗯,我正在學習C++從這個網站 - cplusplus.com/reference/clibrary/cstdio,有可能是網站。如果這不是C++是什麼?我在哪裏可以學習C++,如果它不是C++? – Y2ok

0

有多個問題與您的代碼:

#include <stdio.h> 

這是一個C包括,不是C++包括。相反,你應該使用:

#include <cstdio> 

fscanf (inFile, "%s", n); 

格式%s是字符串,char*類型。你想讀取一個十進制數,所以用%d代替。此外,你必須通過目的地的地址

fscanf (inFile, "%d", &n); 

fprintf (outFile, "%n", n); 

格式%n用於查詢到目前爲止寫入的字節數,需要一個指針。既然你想寫一個十進制數,再次使用%d

fprintf (outFile, "%d", n); 
+0

已更改,但啓動後無法發送.exe – Y2ok

0

隨時隨地使用的iostream(Bjorns答案)

但我認爲

outFile = fopen ("reiz.out","r+"); 

應該

outFile = fopen ("reiz.out","w+"); 

fscanf (inFile, "%d", n); 

應該是

fscanf (inFile, "%d", &n); 

爲了便於參考,一個完全工作(Ç)程序:

#include <stdio.h> 

int main() { 
    int n; 
    FILE * inFile; 
    FILE * outFile; 
    inFile = fopen ("reiz.in","r"); 
    outFile = fopen ("reiz.out","w+"); 
    fscanf (inFile, "%d", &n); 
    int m = n * 2; 
    fprintf (outFile, "%i", m); 
    fclose (inFile); 
    fclose (outFile); 
    return 0; 
} 
+0

仍然沒有幫助。 – Y2ok

+0

@ Y2ok:不客氣。試試吧(我之前有錯別字,請看看你是否錯過了我的編輯?) – sehe

+0

如果輸出文件存在,開放模式'「r +」'很好。如果它應該由程序創建,它必須是'「w」'或'「w +」'。 –

0

有兩個問題與fscanf。首先,你的格式字符串是錯誤的 - 你正在接受一個字符串,你應該在哪裏接受一個(帶符號?)的小數。其次,要傳遞的價值n,但你應該傳遞一個指針代替n

fscanf (inFile, "%d", &n); 

您還#include荷蘭國際集團現在不推薦使用<stdio.h>文件。你應該:

#include <cstdio> 

最後,你要求要編寫C++代碼,但實際上你寫的代碼是決然不會C++ - ISH,這就是說它的類型是不安全的。我建議你或者去C++,或者不要 - 不要舔腳。

這裏是做你想要做什麼(你應該添加錯誤檢查和寫入到輸出文件)的多個C++方式:

#include <cstdio> 
#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    ifstream in("reiz.in", std::ios::in); 
    int n = 0; 
    in >> n; 
    return 0; 
} 
0

有幾個問題,這將阻止你的代碼從正常工作。

  1. 無需打開outfiler+。你可以用w模式打開它。

    outFile = fopen ("reiz.out","w"); 
    
  2. 當你從fscanf文件中讀取,要傳遞到整數n整數n而不是指針。 fscanf正期待收到位置來寫入它讀取的整數。你傳遞的是整數本身(最好的情況是,你的程序會崩潰,最糟糕的情況是,怪異的東西會開始發生)。

    fscanf (inFile, "%s", &n); 
    
  3. 寫入outfile時正在使用%n。這不會打印整數n,而是它讀取到目前爲止寫入的字節數。您想用%d代替。

    fprintf (outFile, "%d", m); 
    

此外,作爲一個側面說明,你似乎是用C而不是C++。在C++中,通常使用文件流對象(如ifstreamofstream)來讀取和寫入文件。你正在使用像fopen這些明顯更像C的東西。

此代碼應工作得更好:

#include <stdio.h> 

int main() { 
    int n; 
    FILE * inFile; 
    FILE * outFile; 
    inFile = fopen ("reiz.in","r"); 
    outFile = fopen ("reiz.out","w"); 
    fscanf (inFile, "%d", &n); 
    int m = n * 2; 
    fprintf (outFile, "%d\n", m); 
    fclose (inFile); 
    fclose (outFile); 
    return 0; 
}