• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Непонятная Ошибка (си)

  • Автор темы d3fToR
  • Дата начала
D

d3fToR

У меня такая проблема:
Ниже я вставил код программы, в которой определена функция, которая переводит число из 10-чной Системы счисления(сс) в n-ичную сс, где n<=25.
Если вы запустите программу, то увидите, что число переводится правильно ( только в массиве запись не верна ), но если речь идёт о, допустим 12-ичной, то после 9ти идёт А,В и так далее. Так вот, после подсчёта остатков после деления, он не переводит остаток из числа в символ, допустим если у меня остаток 12, то он не переводит в С. Вместо этого он оставляет пробелы.. Я не понимаю почему, спросил у преподователя, он тоже не смог найти ошибку. Надеюсь на вас. Код компилируется ( у меня MinGW ), синтаксических ошибок нету, поэтому можете скомпилировать и посмотреть, что на том месте где должен быть символ, появляется пробел, а после него, для наглядности я поставил это "-|".

Огромное спасибо, за то что хотябы уделили мне своё внимание.


C++:
#include "stdio.h"
void perevod4isla(int x, int n)
{
char a[]="0123456789ABCDEFGHIJKLMNO";
int mass[10],i;
puts("Введите число в десятичной системе счисления");
scanf("%i", &x); 
puts("Введите систему счисления");
scanf("%i", &n); 
if(x<=0) 
{ 
puts("Второе число должно быть положительное!"); 
scanf("%i", &x);
};
for(i=0;i<=10;i++)
{
mass[i]=x%n;
x/=n;
printf("%i", mass[i]);
};
for(i=0;i<=10;i++)
printf("%c-|", a[mass[i]]);
};

void main()
{
int x,n;
perevod4isla(x,n);
}
 
Q

qqwertty

У вас массив a портится, во всяком случае у меня, да.

C++:
for(i=0;i<=10;i++)
{
mass[i]=x%n;
x/=n;
printf("%i", mass[i]);
};

Вот здесь у вас ошибка. Массив mas имеет 10 элементов. А вы пишите что-то в 11. Перепишите цикл
 
D

d3fToR

qqwertty, огромое спасибо!) так и знал, что какая-то банальная ошибка..
СПАСИБО!!!
 
D

d3fToR

Появилась новая проблема, не могу поменять условие цикла так, чтобы остаток числа,который вычисляется первый, записывался в последний элемент массива, следующий в n-1, вот код, вроде правильный, но при компиляции всё равно пишет по старому?О_о файл точно тото компилирую и сохраняю ;)

C++:
for(i=9;i>=0;i--)//(i=0;i<10;i++) - код, который был раньше
{
mass[i]=x%n;
x/=n;
printf("%i", mass[i]);
};
 
Q

qqwertty

Выводите в том же цикле - следовательно массив у вас в обратном порядке. Отдельно вывод сделайте.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!