具有文件输入跳过条件的算法 - C语言

时间:2015-03-21 22:08:10

标签: c algorithm file loops conditional-statements

在我们的教科书中通过实例和练习时,我发现了一个看似简单的问题:

  

将前K行文件input.txt中的前K个字符复制到文件out1.txt中,将其余字符复制到out2.txt中。跳过L行,然后将剩余行的前L个字符复制到out1.txt,将其余部分复制到out2.txt。   同时在所有文件中保持格式化(\ n个字符数)相同。

我提出了以下算法,并在提供的文件上对其进行了测试。 有趣的是程序根本不关心条件,而是简单地将前K个字符复制到out1.txt中,其余的复制到out2.txt中。 我尝试调试程序是不成功的,因为Codeblocs似乎没有看到输入文件而只是跳过整个算法,因为初始条件没有实现。

这让我发疯,老实说,我看不出我做错了什么。 在你不问之前它不是作业。

注意:i是字符的计数器,lk是常量。

while (chr != EOF) {
    if ((line < k) && (i < k)) {
        fputc(chr, out1);
    } else
    if ((line < k) && (i > k)) {
        fputc(chr, out2);
    } else
    if ((line > (l+k)) && (i < l)) {
        fputc(chr, out1);
    } else
    if ((line > (l+k)) && (i > l)) {
        fputc(chr, out2);
    } else
    if (chr == '\n') {
        fputc(chr, out1);
        fputc(chr, out2);
        line = line + 1;
        i = 0;
    }
    i = i + 1;
    chr = fgetc(input);
}

1 个答案:

答案 0 :(得分:1)

您应首先在循环中测试'\n'。否则,换行符将作为行的一部分输出,并且行计数不会正确更新。

int chr;
int line = 0;
int i = 0;    

while ((chr = getc(input)) != EOF) {
    if (chr == '\n') {
        fputc(chr, out1);
        fputc(chr, out2);
        line = line + 1;
        i = 0;
    } else {
        if ((line < k) && (i < k)) {
            fputc(chr, out1);
        } else
        if ((line < k) && (i >= k)) {
            fputc(chr, out2);
        } else
        if ((line >= (l+k)) && (i < l)) {
            fputc(chr, out1);
        } else
        if ((line >= (l+k)) && (i >= l)) {
            fputc(chr, out2);
        }
        i = i + 1;
    }
}