При попытке выполнить операцию сравнения двух целых чисел возникает ошибка. Как исправить эту ошибку?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <math.h>
void rev(const char* const c)
{
if (*c)
{
rev(c + 1);
putchar(*c);
}
}
int strfind(const char* const c, char* a) {
}
int Convert() {
setlocale(LC_ALL, "Rus");
char alph[36] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int s1, s2;
char num[37], result[10000] = "";
printf("Введите систему счисления числа, которое надо преобразовать \n");
scanf("%d", &s1);
printf("Введите число до 36 символов \n");
scanf("%s", &num);
printf("Введите систему счисления числа, которое надо преобразовать \n");
scanf("%d", &s2);
long numInTenSys = 0;
int n = strlen(num);
num[n] = 0;
long preresult;
long preresult2;
int substring;
for (int i = 0; i < n; i++) {
preresult = pow(s1, (n - i -1));
substring= num[i];
preresult2 = strchr(alph, substring) - alph;
numInTenSys += preresult*preresult2;
}
int mod, div;
while (1) {
mod = numInTenSys % s2;
div = numInTenSys / s2;
strcat(result, alph[mod]);
if (div < s2) { // Здесь возникает ошибка
strcat(result, alph[div]);
break;
}
numInTenSys = div;
}
rev(result);
printf("%s", result);
return 0;
}
Ошибка возникает из-за попытки сравнить целое число `div` с символом `s2`. Чтобы исправить эту ошибку, нужно изменить тип данных переменной `div` на `int`, чтобы можно было сравнить его с `s2`. Замените строку `int div;` на `int div = 0;`, чтобы явно указать тип данных переменной `div`.
Отключите оптимизацию и соберите проект в режиме отладки. Возможно, в вашем коде есть неопределенное поведение и проблемы с управлением памятью. Иногда ошибка может проявляться не там, где она фактически происходит. Я заметил проблему в этой строке: strcat(result, alph[mod]). Вы добавляете строку с адресом alph[mod] к строке, на которую указывает result. Обратите внимание, что это не строка, начинающаяся с позиции mod в массиве alph, а строка с адресом, например, символа 'F'. Возможно, вы не хотите копировать часть строки alph в result. Кроме того, массив alph[] не имеет места для терминирующего символа 0, поэтому вызов strcat может привести к переполнению буфера. Вам нужно просто добавить один символ в конец result. Нет встроенных функций для этого. Ведите счетчик символов в вашем ответе и просто присвойте значение result[cnt].