[C] Conversione binario decimale

floppyes
Ciao a tutti!
Sono alle prese con questo nuovo esercizio di programmazione in C in cui non mi tornano alcune cose. So che in internet ci sono un sacco di esempi già pronti, però ho provato a realizzarne uno io e la conversione non torna :-D
#include <stdio.h>
#include <math.h>
void scambia(int *);
int main()
{
int binario[4], i, conv=0, pot=0, nuovo[4];
int *pi;
pi = binario;
printf("Inserisci i singoli numeri del codice binario uno per volta:\n");
// L'utente inserisce i singoli numeri del suo codice binario
for (i=0;i<4;i++)
{
printf("==> ");
scanf("%d", &binario[i]);
// Se i numeri immessi sono diversi da 0 e 1 allora deve inserire nuovamente il numero
if (binario[i]!=0 && binario[i]!=1)
{
i--;
}
}
// Scambio gli elementi del vettore per riuscire a convertire correttamente il numero
scambia(pi);
for (i=0;i<4;i++)
{
nuovo[i]=binario[i];
}
// Funzione di debug per verificare che lo scambio sia stato effettuato correttamente
printf("\nNuovo binario inserito:\t");
for (i=0;i<4;i++)
{
printf("%d", nuovo[i]);
}
// Eseguo la conversione utilizzando la funzione pow del file <math.h>
for (i=0;i<4;i++)
{
if (binario[i]==1)
{
pot = pow (2,i);
conv=conv+pot;
}
}
// Stampo il numero convertito in decimale
printf("\nEcco il numero converito: %d", conv);
return 0;
}
// Dichiaro la funzione scambio
void scambia(int *p)
{
int temp;
int i;
for (i=0;i<4;i++)
{
temp = p[0+i];
p[i] = p[3-i];
p[3-i] = temp;
}
}

L'utente inserisce le cifre del numero binario (in questo caso fino a 4 cifre). Il programma scambia gli elementi acquisiti ed esegue la conversione utilizzando la funzione
pow(x,y)
della libreria
math.h

Ho aggiunto la funzione chiamata
scambia
perchè altrimenti se l'utente inserisce:
1100
al posto di avere 12 ottiene 3, a causa dell'ordine dei numeri nel vettore.
Se provo ad eseguire il codice ed inserire la sequenza
1100
ottengo sempre 3 al posto di 12.

Dov'è l'errore? :D
Grazie mille
Ciaoo!

Risposte
Atem1
"Atem":

Invece se non lo commenti, "fine" verrà visualizzato attaccato al tuo nome, perchè la fgets nella stringa memorizza anche "\n" come ultimo carattere.


Ovviamente intendevo dire come "penultimo" carattere visto che l'ultimo è sempre '\0'.
Una stringa è un array di caratteri che termina con '\0'.

floppyes
Ciao!
Grazie mille per l'esaustiva risposta, ora provo a riscrivere il programma e vediamo cosa esce!
Grazie
Ciao :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.