Вывод непонятных символы в си
Задача состоит в том, чтобы написать функцию по поразрядному сложению двух длинных чисел. При запуске выводятся непонятные символы. Код ниже и он тестовый, первое число всегда будет больше второго. Буду рад, если кто то поможет
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int findDigitsCount(long num){
int digits_count = 0;
while(num>0){
num /=10;
digits_count++;
}
return digits_count;
}
int findMax(int num1, int num2){
if(num1 >= num2){
return num1;
}
else{
return num2;
}
}
char * additionNumbers(char * num1, char * num2, int digits_count1, int digits_count2){
int max_digits_count = findMax(digits_count1, digits_count2);
int remainder = 0;
if(max_digits_count==digits_count1){
for(int i = max_digits_count; i!=0; i--){
num1[i] = ((num1[i] - '0') + (num2[i] - '0') + remainder) + '0';
remainder = num1[i] / 10;
num1[i] %= 10;
}
}
}
int main(){
long num1, num2;
printf("Input first num: ");
scanf("%ld", &num1);
printf("Input second num: ");
scanf("%ld", &num2);
int digits_count1 = findDigitsCount(num1);
char * char_num1 = malloc(sizeof(char) * (digits_count1+1));
sprintf(char_num1, "%ld", num1);
int digits_count2 = findDigitsCount(num1);
char * char_num2 = malloc(sizeof(char) * (digits_count2+1));
sprintf(char_num2, "%ld", num2);
additionNumbers(char_num1, char_num2, digits_count1, digits_count2);
printf("%s", char_num1);
free(char_num1);
free(char_num2);
getchar();
getchar();
}
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
Для начала:
- У вас функция findDigitsCount(num1) вызывается два раза с одним и тем же аргументом num1. А num2 вообще не используется.
- В функции additionNumbers() есть оператор if(max_digits_count==digits_count1){ но в нём нет ветки else. Что должно происходить, если равенства нет?
- Функция char * additionNumbers объявлена, как возвращающая указатель. Но в ней нет ни одного оператора return.
- В этой же функции есть оператор remainder = num1[i] / 10; Проблема в том, в num1[i] хранится код символа. Делить его на число 10 абсолютно бессмыслленно.