При использовании fprintf я получаю зеркальный массив символов на выходе - PullRequest
0 голосов
/ 05 июня 2019

Я конвертирую числа из 10 счетной системы (cs) в другую и печатаю ее в файл.

void Fileoutkey(char *res1, char *res2, int sys1, int sys2) //KANON
{
    FILE *fp;
    if(fp = fopen("task_out.cpp", "w"))
    {

        fprintf(fp, "%d: %s\n", sys1, res1);
        fprintf(fp, "%d: %s\n", sys2, res2);
        fclose(fp);
    }
    else
    {
        printf("No such file in directory.\n");
        exit(1);
    }
}

Функция преобразования (и это нормально)

int numSystem1 = 12;
char digits1 [13] = "0123456789AB";
char result1 [18] = "";
int digCount1 = 0;
while (num)
{
    int rem1 = num % numSystem1;
    result1 [digCount1] = digits1[rem1];
    num /= numSystem1;
    digCount1++;    
    for (int i = digCount1; i >= 0; i--)
    {
        cout << result1[i]; //here i get 10
    }   
}

При преобразовании из 10 в 12 сс для, например, числа 12 вместо 10 я получаю 01.Вывод в консоль правильный.

1 Ответ

5 голосов
/ 05 июня 2019

Код конверсии определенно не работает.Используя ваш пример преобразования 12 из основания 10 в основание 12, цикл выполняет следующее:

В первый раз num равно 12. 12 % 12 равно 0 - то есть то, что сохраняется как первый символвашей строки.num затем делится на 12, чтобы стать 1.

Во второй раз 1 % 12 равно 1, и это добавляется как второй символ.Это означает, что ваша строка теперь содержит «01».Это то, что вы видите в своем выводе - ваш код добавляет цифры в обратном порядке.

Вы можете определить, насколько велико ваше число, а затем отсчитать его, чтобы добавить символы в другой.Направьте или переверните строку, используя.

А также после цикла вам необходимо добавить символ-терминатор NUL, например:

result1 [digCount1] = '\0';
...