2016-11-09 10 views
-1

1つのファイルから別の文字にコンテンツをコピーする方法はわかっていますが、単語ごとにそれを行うことになっています。私はこのコードを試しましたが、これを実行すると、出力ファイルは新しい行の各単語を持つことになります。あるファイルから別のファイルに内容をコピーするにはどうしたらいいですか?Cで単語ごとに1つのファイルから別の単語に内容をコピーする方法は?

#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)を使用して、 ['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); 
} 

をバッファを使用すると、出力ファイルに行全体を書き込むことができるように行の文字列全体が含まれています。

関連する問題