无法使用‘cmp’正确比较两个文本文件

无法使用‘cmp’正确比较两个文本文件

我正在尝试使用以下方法比较两个文本文件:

if cmp -s file1 file2
 then
echo "Accepted"
 else
echo "Wrong Answer"
fi

一个 C++ 程序的输出被传输到文件 1,而预期的输出已被我保存在文件 2 中。例如,一个“Hello World”程序将输出打印到文件 1,而我已经将“Hello World”文本复制到文件 2 中。尽管两个文件中的文本完全相同,但为什么我得到的是“错误答案”?

而当我将 1 到 10 之间的整数打印到 file1 并已将预期输出保存在 file2 中时,此方法有效。这次,我得到了 "Accepted" 。我可以推断,数字比较可以正常工作,而字符比较则不起作用。

答案1

如果你cmp不带该-s选项运行,它会解释为什么它认为文件不同。

根据您在评论中发布的代码,以下是使用十六进制编辑器查看文件的样子:

res_op_file\n长度为 12 个字节,以( 0a)结尾:

0000000: 4865 6c6c 6f20 576f 726c 640a            Hello World.

op_file长度为 11 个字节,并且没有\n

0000000: 4865 6c6c 6f20 576f 726c 64              Hello World

diff有一个-Z选项“--ignore-trailing-space”,它将忽略行尾的任何空格。如果您不关心 的diff输出,只需将其放在> /dev/null命令末尾,例如:

if diff -Z file1 file2 > /dev/null
 then
echo "Accepted"
 else
echo "Wrong Answer"
fi

相关内容