在第7行后插入空行

时间:2013-11-17 02:47:18

标签: c

这是我的第一个C班。我需要编写一个程序,将一个文件内容复制到另一个文件中,并在输出文件的第7行后添加一个空行。我写了一个代码,在每行后添加空行,但我只需要一行。拜托,任何人都可以帮忙。这是我到目前为止所得到的:

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

void main()
{
   FILE *fp1,*fp2;
   char ch;


    fp1 =  fopen("input.txt","r");

    if(fp1==NULL)
    {
        printf("\nThe file was not found.");
        exit(1);
    }

    fp2 =  fopen("outfile.txt","w");

    if(fp2==NULL)
    {
        printf("The file was not opened.");
        exit(1);
    }

    while(1)
    {
       ch = fgetc(fp1);

       if (ch=='\n')
       putc(ch, fp2);

       if(ch==EOF)
          break;
       else
          putc(ch, fp2);
    }

    printf("File copied succesfully!");
    fclose(fp1);
    fclose(fp2);
}

1 个答案:

答案 0 :(得分:1)

您确定当前正在添加额外的换行符每隔时间找到一个。相反,您需要一种方法来识别第7行。听起来像你可以计算换行符,然后只在第七行之后进行额外换行。也许在主函数的顶部添加另一个整数:

int newline_count = 0;

在循环中增加它,并且只在需要时添加换行符:

if (ch == '\n'){

    ++newline_count; /* increments newline_count by 1 */

    if (newline_count == 7){   

        putc(ch, fp2);

    }
}

几点说明:

1)您注意到我的第二个IF语句中有括号在技术上是不必要的。它本质上只是一种风格选择,如果你愿意,你可以将它们关闭,但是如果你仍然应该缩进IF语句所控制的语句,如下所示:

    if (newline_count == 7)
        putc(ch, fp2);

在您的代码中,您的第三个IF语句与它控制的语句具有相同的缩进。如果缩进第二个语句,它将更具可读性。

2)你的主要功能永远不应该是无效的。你应该至少有这个:

int main(){

    /* ... stuff ... */

    return (0);
}

请参阅this question的第一个答案,了解有关main()应如何显示的更多信息,更重要的是,为什么。

3)如果您重新排序if语句,我认为您的整个循环看起来会更清晰:

while(1)
{
   ch = fgetc(fp1);

   if (ch == EOF)
      break;

   if (ch == '\n'){
        ++newline_count; /* incremement count of newlines by 1 */

        if (newline_count == 7){   
            putc('\n', fp2); /* insert a newline character */
        }
    }

     putc(ch, fp2);
}

通过重新排序,你已经摆脱了额外的&#34;否则&#34;声明。你并不是真的需要它,因为一旦达到EOF你就会突破循环。此外,通过将putc(ch,fp2)更改为putc(&#39; \ n&#39;,fp2),您可以更清楚地确定您对阅读代码的人的意图。你的目标不仅仅是再次复制同一个角色,而是在那里放一条新线。