gpt4 book ai didi

c - 在第 7 行之后插入空行

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:56 25 4
gpt4 key购买 nike

这是我的第一个 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);
}

最佳答案

你是对的,你当前每次找到一个额外的换行符。相反,您需要一种方法来识别第 7 行。在我看来你可以计算换行符,然后只在第七个之后做额外的换行符放置。也许在 main 函数的顶部添加另一个整数:

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);
}

通过重新排序,您已经摆脱了额外的“else”语句。你一开始并不真正需要它,因为一旦达到 EOF 你就会跳出循环。此外,通过将 putc(ch, fp2) 更改为 putc('\n', fp2),您可以更清楚地向阅读您的代码的人表明您的意图。您的目标不仅仅是再次复制相同的字符,而是在其中放置一个新行。

关于c - 在第 7 行之后插入空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com