【发布时间】:2015-05-25 04:00:57
【问题描述】:
在浏览我们教科书中的示例和练习时,我发现了一个看似简单的问题:
将文件 input.txt 的前 K 行中的前 K 个字符复制到文件 out1.txt 中,并将行中的其余字符复制到 out2.txt 中。跳过 L 行,然后将剩余行的前 L 个字符复制到 out1.txt 中,将其余文本复制到 out2.txt 中。 同时在所有文件中保持格式(\n 字符数)相同。
我想出了以下算法并在提供的文件上对其进行了测试。 有趣的是,该程序根本不关心条件,它只是将前 K 个字符复制到 out1.txt 中,其余的复制到 out2.txt 中。 我调试程序的尝试没有成功,因为 Codebloc 似乎没有看到输入文件,并且只是跳过了整个算法,因为初始条件不满足。
这让我发疯,老实说,我看不出我做错了什么。 在你问不之前,这不是功课。
注意: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);
}
【问题讨论】:
-
在调试器中运行时行为可能不同,因为工作目录不同。暂时,尝试使用完整路径打开文件。
-
你的逻辑不准确:如果
i == k或i == l会发生什么?您的代码格式错误,难以阅读。znak是什么?您应该发布更多代码。 -
很抱歉那个 znak 是 chr 变量的原始名称。英语不是你看到的我的第一语言。我也知道这种情况并不能涵盖一切。我的方法是首先看看我是否走在正确的轨道上,然后扩展逻辑以涵盖所有可能性。另外我会尝试放置完整的调试路径。
标签: c algorithm file loops conditional-statements