【发布时间】:2015-06-26 05:38:04
【问题描述】:
这个函数应该在一个文本文件中搜索换行符。当它找到换行符时,它会增加newLine 计数器,当有超过 2 个连续的空白新行时,它假设将所有空白行压缩到一个空白行中。
在我的代码中,如果有 2 条新行,则假设将它们删除并将它们压缩为一条,出于测试目的,我还让它在达到 newLine < 2 条件时打印“新行”。现在它为每个新行打印新行,无论它是否为空白,并且它没有摆脱额外的新行。我究竟做错了什么?
编辑:这是我的完整代码 http://pastebin.com/bsD3b38a
因此,基本上该程序假设将两个文件连接在一起,然后对它们执行各种操作,就像我正在尝试做的那样,摆脱多个连续的空白新行。 所以为了在cygwin中执行它我做 ./a -s 文件1 文件2 它假设将 file1 和 file2 连接到一个名为 contents.txt 的文件中,然后去掉连续的新行并将它们显示在我的 cygwin 终端(stdout)上。 ( -s 调用该函数以摆脱连续的行)。传入的第三个和第四个参数(file1 和 file2)是两个文件,它假设要连接在一起形成一个名为 contents.txt 的文件。您可以在下面查看我放入 file1.txt 的内容示例。 file2.txt 只有一堆单词,后面跟着空的新行。
int newLine = 1;
int c;
if ((fileContents = fopen("fileContents.txt", "r")) == 0)
{
perror("fopen");
return 1;
}
while ((c = fgetc(fileContents)) != EOF)
{
if (c == '\n')
{
newLine++;
if (newLine < 2)
{
printf("new line");
putchar(c);
}
}
else
{
putchar(c);
newLine = 0;
}
}
程序在包含这些内容的 .txt 文件中读取的文件。它假设读取文件,摆脱前导和连续的新行,并将新格式化的内容输出到我的 cywgin 终端上的标准输出。
/* hello world program */
#include <stdio.h>
tab
2tabs
【问题讨论】:
-
您确定
c必须是int? -
我认为你的代码逻辑是正确的。 1)通过定义
newLine = 1,它将去掉输入txt的任何前导'\n'。 2)当有几个连续的新行时,它只会输出一个'\n'。 -
@Sinstein:是的,
c是int至关重要,因为fgetc()、getc()和getchar()都返回int而不是char。你可以找到很多涵盖这一点的问题。 -
@Sinstein:
intvschar的一个例子是while ((c = getc(file)) != EOF)loop won't stop executing。