2016-11-09 72 views
-1

我知道如何將內容從一個文件複製到另一個字符,但我應該逐字逐句地完成。我試過這段代碼,但是當我運行這段代碼時,我的輸出文件最終將每個單詞放在一行中。我應該如何將文件內容從一個文件複製到另一個文件(按原樣)?如何從一個文件複製內容到另一個單詞在C?

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char* argv[]) 
{ 
    // Error checking 
    if(argc < 3) 
    { 
     fprintf(stderr, "Please print two arguments"); 
     exit(EXIT_FAILURE); 
    } 

    char* input = argv[1]; 
    char* output = argv[2]; 
    char buffer[4096]; 

    FILE* fp_open = fopen(input, "r"); 
    if(fp_open == NULL) fprintf(stderr, "Unable to open input file"); 

    FILE* fp_write = fopen(output, "w"); 
    if(fp_write == NULL) fprintf(stderr, "Unable to open output file"); 

    while(fscanf(fp_open, "%s", buffer) == 1) 
    { 
     fprintf(fp_write,"%s\n", buffer); 
    } 

    fclose(fp_open); 
    fclose(fp_write); 

    return 0; 
} 

注意:我只允許使用fscanf("%s")從輸入文件中讀取數據。

P.S.我也知道這樣做效率低下,但這是我應該做的。

+0

用換行結束錯誤信息。在錯誤消息中包含不可打開的文件的名稱。如果未打開的文件無法打開,請不要繼續使用。對於大多數目的而言,如果單詞之間的間距很重要,或者您需要準確跟蹤換行符,則不能使用'sscanf()'。如果你只允許使用'%s'而不是'%c'或類似的東西(例如'getc()'),那麼你就被卡住了 - 你不能說出字符分隔的是什麼樣的空格因爲你不允許使用能讓你發現的工具。 –

+0

格式:註明。但是有沒有辦法做到這一點?就像先說一句整句話,然後開始逐字掃描,然後用空格等分開它們。 – posixKing

+0

是的;有一些方法可以用['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)(或 ['getline()'](http:// pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)在POSIX-ish系統上),然後使用 ['sscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions /sscanf.html)(參見[如何在循環中使用sscanf()](http://stackoverflow.com/questions/3975236/how-to-use-sscanf-in-loops))。但是如果你被'fscanf(fp,「%s」,buffer)'作爲唯一允許的輸入機制卡住了,那麼我認爲你已經崩潰了。 –

回答

0

因爲該請求是唯一使用的fscanf讀取字符串,請使用以下邏輯:

char c; 
char tmpbuffer[100], buffer[1000]; 

fp = fopen("file.txt","r"); 
while(fscanf(fp,"%s",tmpbuffer)!=-1) 
{ 
strcat(buffer,tmpbuffer,strlen(tmpbuffer)); 
while((c = fgetc(fp)) == " ") 
{ 
strcat(buffer,&c,1); 
} 
fseek(fp,-1,SEEK_CUR); 
} 

這裏的緩衝區包含的行的所有字符串,所以你可以寫整行到輸出文件。

相關問題