Принять двоичную строку от пользователя и проверить ее действительность в C? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь попросить пользователя ввести две двоичные последовательности и проверить, действительны ли они.Вот мой коди 0

пример

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

В вашем коде есть несколько ошибок.

Давайте попробуем добавить дополнительную информацию к вашим диагностическим сообщениям:

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' в условное выражение является избыточным.

0 голосов
/ 04 февраля 2019

Ваша проверка на неправильные символы неверна.

if(seq1[i]>48||seq1[i]<49)

Эта проверка всегда верна, поскольку каждое число равно >48 или <49.Но вы хотите проверить, является ли значение <48 или >49.

. Правильно будет

if(seq1[i]<48||seq1[i]>49)

или лучше читается как

if(seq1[i]<'0'||seq1[i]>'1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...