Não é possível comparar corretamente dois arquivos de texto usando 'cmp'

1

Estou tentando comparar dois arquivos de texto usando:

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

A saída de um programa C ++ é canalizada para o arquivo1, e a saída esperada já é salva por mim no arquivo2. Por exemplo, um programa 'Hello World' imprime a saída para file1, e eu já copiei o texto 'Hello World' no arquivo2. Apesar do texto nos dois arquivos ser exatamente o mesmo, por que estou recebendo 'Resposta Errada'?

Considerando que isso funciona quando eu imprimo inteiros de 1 a 10 para o arquivo1 e já salvei a saída esperada no arquivo2. Desta vez, estou recebendo "Aceito". O que posso inferir é que a comparação de números funciona bem, enquanto a comparação de caracteres não funciona.

    
por Yankee 14.01.2015 / 10:24

1 resposta

1

Se você executar cmp sem a opção -s , isso explicará por que ele acha que os arquivos são diferentes.

Do seu código postado nos seus comentários, veja como seus arquivos se parecem com um editor hexadecimal:

res_op_file tem 12 bytes e termina com \n ( 0a ):

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

op_file tem 11 bytes e não tem o \n :

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

diff tem a opção -Z , "--ignore-trailing-space", que irá ignorar qualquer espaço em branco no final de uma linha. Se você não se importa com a saída de diff , basta colocar > /dev/null no final do comando, como:

if diff -Z file1 file2 > /dev/null
 then
echo "Accepted"
 else
echo "Wrong Answer"
fi
    
por nerd65536 14.01.2015 / 12:35