В вашем коде есть несколько ошибок.
Давайте попробуем добавить дополнительную информацию к вашим диагностическим сообщениям:
if (strlen(seq1) < 8 || strlen(seq2) < 8)
{
printf("Error: must enter 8-bits; strlen(seq1) = %zu strlen(seq2) = %zu\n", strlen(seq1), strlen(seq2));
exit(1);
}
for (int i = 0; seq1[i] != '\0'; i++)
{
if (seq1[i] > 48 || seq1[i] < 49)
{
printf("Error: non-binary detected (seq1[%d] = 0x%hhX)\n", i, seq1[i]);
exit(1);
}
}
for (int i = 0; seq2[i] != '\0'; i++)
{
if (seq2[i] > 48 || seq2[i] < 49)
{
printf("Error: non-binary detected (seq2[%d] = 0x%hhX)\n", i, seq2[i]);
exit(1);
}
}
Сразу же мы видим сообщение об ошибке: Error: non-binary detected (seq1[0] = 0x31)
,Это странно, потому что 0x31 - это код ASCII для цифры 1, которая должна быть приемлемой двоичной цифрой.Пересмотрите свою логику здесь:
seq1[i] > 48 || seq1[i] < 49 // In other words seq1[i] > '0' || seq1[i] < '1'
Это утверждение будет верным, если seq1[i]
содержит значение, которое больше '0'
, или если оно содержит значение, которое меньше '1'
.Другими словами, этот оператор всегда будет истинным и вызовет обработчик ошибок.Правильное условие для того, что вы хотите проверить:
if(seq1[i] != '0' && seq1[i] != '1')
Кроме того, если вы читаете строку длиной 8 символов, вам нужно минимум 9 символов в буфере для хранения нулевого значения.терминатор.
Кроме того, явное включение != '\0'
в условное выражение является избыточным.