在我们的教科书中通过实例和练习时,我发现了一个看似简单的问题:
将前K行文件input.txt中的前K个字符复制到文件out1.txt中,将其余字符复制到out2.txt中。跳过L行,然后将剩余行的前L个字符复制到out1.txt,将其余部分复制到out2.txt。 同时在所有文件中保持格式化(\ n个字符数)相同。
我提出了以下算法,并在提供的文件上对其进行了测试。 有趣的是程序根本不关心条件,而是简单地将前K个字符复制到out1.txt中,其余的复制到out2.txt中。 我尝试调试程序是不成功的,因为Codeblocs似乎没有看到输入文件而只是跳过整个算法,因为初始条件没有实现。
这让我发疯,老实说,我看不出我做错了什么。 在你不问之前它不是作业。
注意:i
是字符的计数器,l
和k
是常量。
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);
}
答案 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;
}
}