Я изучаю C прямо сейчас, и у меня есть эта проблема. Я хочу преобразовать целое число в массив, мой код работает, но проблема в том, что я объявляю размер массива в начале, и я хочу сделать так, чтобы он работал для каждое целое число в основном.
#include<stdio.h>
int main()
{
int x,i,temp;
int arr1[6];
scanf("%d",&x);
for (i=5;i>=0;i--){
temp=x%10;
arr1[i]=temp;
x/=10;
}
for (i=0;i<=5;i++){
printf("%d",arr1[i]);
}
return 0;
}
Не могли бы вы мне помочь?
Я пытаюсь найти решение проблемы.
Существуют методы динамического увеличения массива до необходимого размера, даже если у вас нет возможности узнать заранее, но я думаю, что в этом случае они излишни.
Если вы хотите попытаться вычислить его заранее, количество цифр в числе x
примерно равно log10(x)
.
Это проблема XY? Обычно, если вы хотите проверить цифры «числа», вы вводите его как строку. Это то, что вы делаете в любом случае: вы вводите его цифра за цифрой, и было бы извращением говорить языку преобразовать его в целое число, а затем кропотливо распаковывать его.
Спасибо за все советы, попробую, а там как пойдет. :D
Во-первых, ваш код не учитывает, что пользователь может ввести отрицательное число.
Если вы не собираетесь иметь дело с отрицательными значениями, объявите переменную x
как имеющую целочисленный тип без знака, как, например, unsigned int
.
Что касается вашей проблемы, вы можете использовать массив переменной длины.
Например
#include <stdio.h>
int main( void )
{
unsigned int x;
if ( scanf( "%u", &x ) == 1 )
{
size_t n = 0;
unsigned int tmp = x;
do
{
++n;
} while ( tmp /= 10 );
unsigned int a[n];
for ( size_t i = n; i != 0; x /= 10 )
{
a[--i] = x % 10;
}
for ( size_t i = 0; i < n; i++ )
{
printf( "%u ", a[i] );
}
putchar( '\n' );
}
}
Если ваш компилятор не поддерживает массивы переменной длины, вы можете динамически выделить массив, используя стандартную функцию malloc
, объявленную в заголовке <stdlib.h>
, например
unsigned int *a = malloc( n * sizeof( *a ) );
Ни одно целое число в любом компиляторе C, который вы, вероятно, будете использовать, не будет содержать более 20 цифр.