• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Faulk_08

[C] Char to Int

12 mensagens neste tópico

Boas pessoal,

Gostava de saber como posso passar de char para int sem usar o atoi(); ???

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um problema interessante. Basicamente tens que pensar como é que TU passas da representação visual de um número (em base 10, geralmente) para aquilo que o número significa.

Dica: Lembra-te da primária - casa das unidades, casa das dezenas, casa das centenas... etc. etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h> 
#define MAX_DIGITOS 80 
int n_inteiro(char n[]){
int num,i,num_total;
for(i=0;i<=MAX_DIGITOS;i++){
num+=n[i]-'0';}
num_total=num;
return num_total;
}
void main() 
{ 
char numero[MAX_DIGITOS+1]; 
int a; 
printf("Indique 1 numero: "); 
gets(numero); 
a=n_inteiro(numero); 
printf("\nO numero e %d \n",a); 
} 

Epa ja tenho isto feito...so que nao tou a conseguir desenvolver...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na função n_inteiro() faltam-te três coisas.

a) Falta-te inicializar 'num'

:) falta-te fazer as contas bem dentro do ciclo :)

Supondo que tinhas a instrução num = 0; antes do ciclo, vamos ver o que acontece com n = "493" ...

num += n[0] - '0';  // num += 4 // num = 4

num += n[1] - '0';  // num += 9 // num = 13

num += n[2] - '0';  // num += 3 // num = 16

num += n[3] - '0';  // num += -48 // num = -32

num += n[4] - '0';  // num += LIXO // num = LIXO

...

c) falta-te parar o ciclo no sítio certo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h> 
#define MAX_DIGITOS 80 
int n_inteiro(char n[]){
int num=0,i;
for(i=0;n[i]!='\0';i++){
num+=n[i]-'0';}
return num;
}
void main() 
{ 
char numero[MAX_DIGITOS+1]; 
int a; 
printf("Indique 1 numero: "); 
gets(numero); 
a=n_inteiro(numero); 
printf("\nO numero e %d \n",a); 
}

Ja tenho isto...So que agora soma-me os numeros.So que agora nao tou a ver como chego ao numero como estava em char???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás no bom caminho. Só tens que te lembrar do que te disse... Os números não valem todos o mesmo. O algarismo '4' na casa das centenas vale 400, por exemplo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a) e c) resolvido!

Falta o :)

num += n[0] - '0'; // num += 4 // num = 4

/* o que é que falta aqui? */

num += n[1] - '0'; // num += 9 // num = 49

/* o que é que falta aqui? */

num += n[2] - '0'; // num += 3 // num = 493

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que tenho que fazer é para 493 :

4*1=4

4*10+9*1=49

4*100+9*10+3*1=493

O pior agora é fazer lol :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E assim, olhando para isso de outra maneira?

(0) + 4 = 4

(4 * 10) + 9 = 49

(49 * 10) + 3 = 493

...

(493 * 10) + 7 = 4937

(4937 * 10) + 0 = 49370

(49370 * 10) + 1 = 493701

...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h> 
#define MAX_DIGITOS 80 
int n_inteiro(char n[]){
int num,i,j,conta=0;
for(i=0;n[i]!='\0';i++){
num=(n[i]-'0');
conta=(conta*10)+num;
}
return conta;
}
void main() 
{ 
char numero[MAX_DIGITOS+1]; 
int a; 
printf("Indique 1 numero: "); 
gets(numero); 
a=n_inteiro(numero); 
printf("\nO numero e %d \n",a); 
}

Ja esta feito.Obrigado pelas vossas dicas.

Fiquem bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tirando o gets(), o teu código tem uma ligeiro problema:

o tipo 'int' não consegue suportar números com 80 digitos. No meu compilador preferido, com as minhas opções preferidas, o tipo 'int' consegue trabalhar com números desde -2147483648 a 2147483647.

Se tiveres que trabalhar com números fora do intervalo que o tipo 'int' aceita no teu compilador, tens que arranjar soluções mais complicadas.

Agora o gets()!

NUNCA USES gets()

esta mensagem minha noutra tópico.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epa mas este exercicio que estava a resolver é dum exame lol.

O que tive que fazer foi a função!!

Mas obrigado pela dica :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora