2016-11-09 86 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); 
} 

这里的缓冲区包含的行的所有字符串,所以你可以写整行到输出文件。

相关问题