Я пытаюсь сравнить два текстовых файла, используя:
if cmp -s file1 file2
then
echo "Accepted"
else
echo "Wrong Answer"
fi
Вывод программы C ++ передается по конвейеру в файл1, а ожидаемый вывод я уже сохранил в файле2. Например, программа «Hello World» печатает выходные данные в файл file1, а я уже скопировал текст «Hello World» в файл file2. Несмотря на то, что текст в двух файлах одинаков, почему я получаю «Неправильный ответ»?
Тогда как это работает, когда я печатаю целые числа от 1 до 10 в файл1 и уже сохраняю ожидаемый результат в файл2 , На этот раз я получаю "Принят". Что я могу сделать вывод, так это то, что сравнение чисел работает хорошо, тогда как сравнение символов не работает.
Если Вы будете работать cmp
без -s
опция, она объяснит , почему она думает, что файлы отличаются.
От Вашего кода, отправленного в Ваших комментариях, Вот то, на что Ваши файлы похожи с Hex-редактором:
res_op_file
12 байтов длиной и заканчивается \n
(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
опция, "-игнорировать-конечный-пробел", который проигнорирует любой пробел в конце строки. Если Вы не заботитесь, что [приблизительно 1 112] производят, просто помещают > /dev/null
до конца команды, как:
if diff -Z file1 file2 > /dev/null
then
echo "Accepted"
else
echo "Wrong Answer"
fi