2010-05-26 7 views
0

Est-il possible de récupérer un nombre entier en utilisant scanf et en affectant chaque chiffre à un tableau int?Affectation de chaque chiffre d'un int à un tableau int

Je suis en train de réaliser ce faire de cette façon:

int numbers[]; 
puts("Enter number"); 
int x; 
scanf("%d",x); 
numbers = malloc(x); 
numbers = x; 
+0

ce que vous dites que vous voulez prendre un entier et le transformer en un chaîne? –

+1

Les compilateurs doivent spécifiquement attraper le cas des personnes passant un int à scanf au lieu d'un int *, et la sortie "NON, vous ne voulez PAS faire ça." BAD "- il semble que chaque fois que quelqu'un utilise scanf sur SO ils font cette erreur. Il devrait être 'scanf ("% d ", &x);' ou vous allez essayer d'écrire un int quel que soit l'emplacement de la mémoire 'x' arrive à tenir –

Répondre

0

Vous pouvez simplement le lire dans une chaîne% s dans un tableau de caractères.

À ce stade, vous avez chaque chiffre dans un caractère.

Un caractère est juste une valeur int. Ainsi, vous pouvez appliquer une transformation après le caractère que vous avez lu dans

Vous pouvez convertir chaque omble chevalier chiffre à sa valeur int et vous pouvez ensuite itérer sur chaque caractère dans la chaîne et faire quelque chose comme ceci:.

myInts[i] = charBuffer[i] - '0'; /* where i = 0.. string length -1 */ 
+0

Je suppose que l'un des problèmes d'OP est de déterminer la quantité de mémoire à allouer . –

0

pas comme par magie comme ça, vous devez lire dans le int et briser les chiffres vous, ou le lire comme une chaîne afin que vous puissiez accéder à chaque personnage individuellement

0

Tout le monde a assez de bonnes réponses à ce que vous voulez, je veux juste souligner ce que votre code est vraiment faire ---

numbers = malloc(x); 

Ici vous avez lu dans l'entrée de l'utilisateur et alloué un tableau de x octets sur le tas. Les nombres pointent vers ce souvenir. C'est votre seul moyen d'arriver à ce tableau.

numbers = x; 

Ensuite, vous avez affecté des nombres à l'entier x. Vous avez maintenant perdu la trace de la mémoire allouée par malloc et n'avez aucun moyen de le supprimer en utilisant free().

1

Deux tours rapides:

entier en chaîne:

int N; 
char buf[10]; 
scanf("%d",&N); 
sprintf(buf,"%d",N); 

Entier à tableau:

int N,i, 
    buf[10], 
    Dig; 
scanf("%d",&N); 
Dig = log10(N); 
for(i = Dig; N ; i--){ 
    buf[i] = N % 10; 
    N /= 10; 
}