Ascii символы в плюсе при запуске программы - PullRequest
0 голосов
/ 24 февраля 2019

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

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

bool Convert(unsigned int number, unsigned int toBase, char * result, 
unsigned int resultMaxSize)
{char p;
int var;

if(number==0)
return false;
while(number>0)
{var=number%toBase;
if(var>=10)
{p=(char)var;
*result=p;
}
else
*result=var+'0';
number=number/toBase;
result++;
}
if(strlen(result)>resultMaxSize)
return false;
strrev(result);
printf("%s", result);
return true;
}

int main()
{char rezultat[200]={0};
unsigned int nr, n, baza;
char *ptr;
ptr=rezultat;
printf("Introduceti numarul de convertit ");
scanf("%d", &nr);
printf("\nIntroduceti baza in care convertim ");
scanf("%d", &baza);
printf("\nIntroduceti numarul de caractere maxim pe care il va avea 
rezultatul ");
scanf("%d", &n);
printf("\n%d",Convert(nr, baza, rezultat, n));
return 0;
}

1 Ответ

0 голосов
/ 24 февраля 2019

когда я печатаю строку, у меня есть несколько символов ascii в плюс

Как сказано в замечании pmg , способ инициализировать w с 0s, иначе strcat , примененный к неинициализированному массиву, имеет неопределенное поведение.Более быстрый способ - просто набрать w[0] = 0;, потому что другие символы бесполезны.

Некоторые дополнительные замечания

  • вы используете itoa обратите внимание, что эта функция не определена в ANSI-C, и gcc не предоставляет ее, однако если вы используете ее, просто выполните void Convert(unsigned int number, unsigned int toBase, char * result) { itoa(number, result, toBase); }

  • , которую вы производитечисло в обратном порядке с добавлением символов в конце, поэтому 14 выдает 0111, а не 1110.

  • делает itoa(number%toBase, s, 10); вместо itoa(number%toBase, s, toBase); ваша программа работает только сbase <= 10. </p>

  • выполнение strcat всегда с начала массива становится все дороже для каждого цикла, поскольку он должен обходить уже добавленные символы.

Я рекомендую вам переписать вашу программу, чтобы получить правильный результат, в том числе для баз, превышающих 10, и на этот раз без использования itoa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...