Создать строку, которая является суммой двух первых. Неправильно работает код - C (СИ)

Формулировка задачи:

Суть задачи: с клавиатуры ввести 2 символьные строки - 8-розрядный двоичный код. Создать 3 строку - сумму этих 2х строк и принять во внимание, что строка может получиться на 1 розряд длинее. Подскажите что не так, и почему считает не совсем верно
#include <stdio.h>
#include <math.h>
int main()
{
int digit_to_int(char d)
{
 char str[2];
 str[0] = d;
 str[1] = '\0';
 return (int) strtol(str, NULL, 10);
}
char a[7];
char b[7];
char t;
int an,bn;
int a_bits[7];
int b_bits[7];
int res[8];
int s=0;
int i;
int temp;
    printf("Enter the first argument:");
    gets(a);
    printf("Enter the second argument:");
    gets(b);
    for (i=0; i<=7; i++)
    {
         a_bits[i]=digit_to_int(a[i]);
         b_bits[i]=digit_to_int(b[i]);
    }
    an=0;
    bn=0;   
    for (i=0; i<=7; i++)
    {
        an=an+(a_bits[i]<<(7-i));
        bn=bn+(b_bits[i]<<(7-i));
    }   
            
    
    s=an+bn;
    temp=s;
    printf("%s"," ");
    printf("%s\n",a);
 
    printf("%s"," ");
    printf("%s\n",b);
    
    for (i=8; i>=0; i--)
    {
     res[i]=temp % 2;
     temp=temp/2;
    }
    for (i=0; i<=8; i++)
    {
     printf("%d",res[i]);
    }
    return 0;
}
и как обьяснить, а лучше заменить эту часть
int main()
{
int digit_to_int(char d)
{
 char str[2];
 str[0] = d;
 str[1] = '\0';
 return (int) strtol(str, NULL, 10);
}

Код к задаче: «Создать строку, которая является суммой двух первых. Неправильно работает код - C (СИ)»

textual
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <limits.h>
#include <string.h>
#include <errno.h>
 
static inline uint8_t * byte_input() {
    uint8_t * byte = NULL, i = 0;
    
    if ((byte = malloc(sizeof(char) * CHAR_BIT + 1)) == NULL) {
        fprintf(stderr, "%s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    for(fputs("input byte:\n", stdout); i < CHAR_BIT; i++)
        byte[i] = getchar();
    getchar();
    byte[i] = '\0';
    
    return byte;
}
 
static inline uint8_t * sum_bytes(uint8_t * x, uint8_t * y) {
    uint8_t * result = NULL;
    char i, j = CHAR_BIT, carry = 0;
    
    if ((result = malloc(sizeof(char) * CHAR_BIT + 2)) == NULL) {
        fprintf(stderr, "%s\n", strerror(errno));
        exit(EXIT_FAILURE);
    }
    
    for(i = CHAR_BIT - 1; i > -1; i--, j--) {
        
        if (x[i] == '0' && y[i] == '0') {
            if (carry) {
                result[j] = '1';
                carry = 0;
            } else
                result[j] = '0';
        } else if ( (x[i] == '0' && y[i] == '1') || 
                    (x[i] == '1' && y[i] == '0')) {
            if (carry)
                result[j] = '0';
            else
                result[j] = '1';
        } else {
            if (carry)
                result[j] = '1';
            else {
                result[j] = '0';
                carry = 1;
            }
        }
    }
    
    if (carry)
        result[j] = '1';
    else
        result[j] = '0';
        
    return result;
}
 
int main (void) {
    
    uint8_t * x, * y, * sum;
    
    x = byte_input();
    y = byte_input();
    sum = sum_bytes(x, y);
    
    fprintf(stdout, "+  %s\n   %s\n----------\n  %s\n", x, y, sum);
    
    free(x);
    free(y);
    free(sum);
 
    exit(EXIT_SUCCESS);
}

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

5   голосов, оценка 4.200 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы