Для L oop работает бесконечно C - PullRequest
0 голосов
/ 09 февраля 2020

Я делаю программу проверки ошибок контрольной суммы с использованием языка C, но я обнаружил бесконечное l oop во время выполнения программы, и у меня нет никакой подсказки, почему я получаю это.

Итак, что я сделал в этой программе, так это то, что я собираюсь сначала преобразовать символы строки в соответствующие коды ASCII, а затем проверить на наличие ошибки контрольной суммы, и для этого я сделал эту программу ниже.

#include <stdio.h>
int a[2], i, dec[10][8], de[2][8], j, k, add[8], carry = 0, n = 5;
int u[] = {0, 0, 0, 0, 0, 0, 0, 1};
char b[] = {'H', 'e', 'l', 'l', 'o'};
int main()
{
    for (k = 0; k < 2; k++)
    {
        for (j = 0; j < 8; j++)
        {
            dec[k][j] = 0;
        }
    }
    for (k = 0; k < 2; k++)
    {
        a[k] = b[k];
    }
    for (k = 0; k < 2; k++)
    {
        i = 0;
        while (a[k] > 0)
        {
            dec[k][i] = a[k] % 2;
            a[k] = a[k] / 2;
            i++;
        }
    }
    i = 0;
s:
    for (k = 0; k < 2; k++)
    {
        for (j = 7; j >= 0; j--)
        {
            de[k][i] = dec[k][j];
            i++;
        }
        i = 0;
    }

    for (k = 0; k < 2; k++)
    {
        for (j = 0; j < 8; j++)
        {
            printf("%d", de[k][j]);
        }
        printf("\n");
    }
    i = 0;
    for (j = 7; j >= 0; j--)
    {
        if (de[i][j] == 1 && de[i + 1][j] == 1 && carry == 0)
        {
            add[j] = 0;
            carry = 1;
        }
        else if (de[i][j] == 1 && de[i + 1][j] == 1 && carry == 1)
        {
            add[j] = 1;
            carry = 1;
        }
        else if (de[i][j] == 0 && de[i + 1][j] == 1 && carry == 1)
        {
            add[j] = 0;
            carry = 1;
        }
        else if (de[i][j] == 0 && de[i + 1][j] == 1 && carry == 0)
        {
            add[j] = 1;
            carry = 0;
        }
        else if (de[i][j] == 0 && de[i + 1][j] == 1 && carry == 1)
        {
            add[j] = 0;
            carry = 1;
        }
        else if (de[i + 1][j] == 0 && de[i][j] == 1 && carry == 0)
        {
            add[j] = 1;
            carry = 0;
        }
        else if (de[i + 1][j] == 0 && de[i][j] == 0 && carry == 0)
        {
            add[j] = 0;
            carry = 0;
        }
        else if (de[i + 1][j] == 0 && de[i][j] == 0 && carry == 1)
        {
            add[j] = 1;
            carry = 0;
        }
    }
    i = i + 2;
    for (k = 0; k < 8; k++)
    {
        de[i][j] = add[j];
    }
    if (carry == 1 && i < n)
    {
        for (k = 0; k < 8; k++)
        {
            de[i + 1][j] = u[j];
        }
        goto s;
    }

    else if (carry == 0 && i < n)
    {
        for (k = 0; k < 8; k++)
        {
            de[i + 1][j] = u[j];
        }
        goto s;
    }
    for (i = 0; i < 8; i++)
        printf("%d", add[i]);
    return 0;
}
...