我正在尝试使用以下方法比较两个文本文件:
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