2014-10-20 101 views
0

我有一個程序從文件中讀取字符串,取出所有大寫字母,然後將其存儲在文件中。事情是,我無法弄清楚如何將它寫入文件,而不是每次調用函數時創建一個新文件。用C語言遞歸寫入文件

我想我真正問的是,我怎樣才能一次又一次地將文件傳入函數?我可以再次將一個指針參數傳遞給函數嗎?

int main() { 
FILE *inputFile; 
inputFile = fopen("codedmessage.txt", "r"); 
char codedMessage[100]; // Will contain - HarjEtvyqaLbLdjlmO 
char decodedMessage[100]; 
fgets(codedMessage, 100, inputFile); 
FILE *outputFile; 
outputFile = fopen("decodedmessage.txt", "r"); 
decode(codedMessage, strlen(codedMessage)-1, &decodedMessage); 

return 0; 
} 

// Decodes the message and prints it to file 
void decode(char msg[], int n, char dmsg[]) { 
    if (!n) { 
     if (isupper(msg[n])) { 
      printf("%c", msg[n]); 
      dmsg[n] += msg[n]; 
     } 
    } 
    else { 
     decode(msg, n-1, *dmsg); 
     if (isupper(msg[n])){ 
      printf("%c", msg[n]); 
      dmsg[n] += msg[n]; 
     } 
    } 
} 

編輯:OS是一般的Linux(Ubuntu和CentOS的具體)

+2

有爲什麼你認爲你*不能*通過你的'文件中的特定原因* '功能? – indiv 2014-10-20 16:10:14

+0

在哪個操作系統上? – 2014-10-20 16:24:45

回答

1

我相信它更容易使用ofstream的,所以我會做到這一點。基本上我所做的一切是:

  • define outputFile as ofstream;
  • 通過它解碼並通過< <運算符向其寫入。

您可以改爲將標準輸出重定向到您的文件,然後直接寫入標準輸出(您不需要更改解碼功能,它將按原樣工作)。

儘管第二個過程很簡單,但它並不容易理解。如果你仍然想使用它:C modifying printf() to output to a file

否則,這裏是一個示例:

#include <iostream> 
#include <fstream> 

void decode(char msg[], int n, char dmsg[], std::ofstream& out); 

int main() { 
    FILE *inputFile; 
    inputFile = fopen("codedmessage.txt", "r"); 
    char codedMessage[100]; // Will contain - HarjEtvyqaLbLdjlmO 
    char decodedMessage[100]; 
    fgets(codedMessage, 100, inputFile); 
    std::ofstream outputFile; 
    outputFile.open("decodedmessage.txt"); 
    decode(codedMessage, strlen(codedMessage) - 1, decodedMessage, outputFile); 

    return 0; 
} 

// Decodes the message and prints it to file 
void decode(char msg[], int n, char dmsg[], std::ofstream& out) { 
if (!n) { 
    if (isupper(msg[n])) { 
     out << msg[n]; //This is what you want to print, is that correct? 
     //printf("%c", msg[n]); 
     dmsg[n] += msg[n]; 
    } 
} 
else { 
    decode(msg, n - 1, dmsg, out); 
    if (isupper(msg[n])){ 
     out << msg[n]; 
     //printf("%c", msg[n]); 
     dmsg[n] += msg[n]; 
    } 
} 

}