2013-02-23 102 views
-1

我想创建一个程序,将文本文件转换为c,只是为了它的乐趣。我的问题是输出值与它应该是不同的。C程序省略字符

#include <stdio.h> 
    #include <string.h> 

    int main(int argc, char *argv[]) { 


    FILE *intf=fopen(argv[1], "r");  //input and output file 
    FILE *ocf=fopen(argv[2], "w"); 
    char b[1000]; 
    char *d; 
    char *s; 
    char *token; 

    const char delim [2] = "`"; 

     fprintf(ocf, "#include <stdio.h>\n int main(void) {\n"); //Preparation 

    while (fgets(b, 20, intf) !=NULL) { //Ensure that EOF has not been reached 

     if (d = strstr(b, "print")) { //Search for "print" in the file 
      fprintf(ocf, "printf(\""); //Prepare for "printf("");" statement 
      s=strstr(b, "`");  //Search for delimiting character 
      token=strtok(s, delim);  //Omit delimiting character 
    while(token != NULL) { 
      token[strlen(token)-1]=NULL; //Omit newline character that kept geting inserted 
      fprintf(ocf, "%s", token); //Print what was read 
      token = strtok(NULL, delim); // 
    } 
     fprintf(ocf, "\");\n");  //Finish printf() statement 
    } 

    } 
     fprintf(ocf, "\n}");  //Finish c file 
     printf("Creation of c file complete \n"); 
    } 

输入文件:

print `hello\n world 
    print `Have a nice day 

和输出:

#include <stdio.h> 
    int main(void) { 
    printf("hello\n wor"); 
    printf("Have a nice"); 

    } 

有人能告诉我在我在做什么错误?

+0

请修正您的代码的缩进,使其更易于阅读。 – 2013-02-23 00:50:19

回答

3

您应该解决这一行:

while (fgets(b, 20, intf) !=NULL) 

它实际上起身准备从行20个字符,所以你不读整行。然后在下一次迭代中读取该行的其余部分,但由于它不包含单词“print”,因此它会被跳过。您应该每行获得超过20个字符来解决此错误。你的缓冲区(b)大小为1000,所以你可以负担得起。

+0

谢谢!这工作完美。我以为我错误地使用了strtok。 – ikdevel 2013-02-23 01:01:16

+1

+1:发现您的诊断。 – 2013-02-23 01:02:07