Hola, estoy intentando aprender a programar y para poner en práctica unas cuantas cosas que he estudiado he hecho este programa que convierte cantidades de bits, megabits, bytes, kilobytes, megabytes, gigabytes y terabytes. Se que seguramente habrá código inútil y lo debo de haber hecho demasiado largo para tan poca cosa. Viendo el nivel que tengo ¿Me podríais dar algunas críticas constructivas? Remarco lo de mi nivel, cosas que pueda entender. Bueno, supongo que leyéndolo se verá que está desarrollado en entorno Linux. Gracias

#include <stdio.h>
#include <string.h>
int main() {
char bit[] = "bits";
char megabit[] = "Mb";
char byte[] = "bytes";
char kbyte[] = "KB";
char megabyte[] = "MB";
char gigabyte[] = "GB";
char terabyte[] = "TB";
int opc1;
int opc2;
/* Guarda la opción escogida por el usuario sobre el tipo de dato en las variables opc1 y opc2 */
printf("\n1.bit\n2.megabit\n3.byte\n4.kbyte\n5.megabyte\n6.gigabyte\n7.terabyte\n\nIntroduce el tipo de dato origen: ");
printf("\n1.bit\n2.megabit\n3.byte\n4.kbyte\n5.megabyte\n6.gigabyte\n7.terabyte\n\nIntroduce el tipo de dato destino: ");
/* Variables para el número introducido por el usuario y el resultado del cálculo */
float num;
float result;
/* Variables para indicar el tipo de dato original y final. */
char ori[6];
char fin[6];
/* Cálculo del resultado */
printf("\nIntroduce la cifra: ");
switch(opc1)
{
case 1:
switch(opc2)
{
case 1:
result = num;
break;
case 2:
result = num / 1000000;
break;
case 3:
result = num / 8;
break;
case 4:
result = num / 1024;
break;
case 5:
result = num / 1024 / 1024;
break;
case 6:
result = num / 1024 / 1024 / 1024;
break;
case 7:
result = num / 1024 / 1024 / 1024 / 1024;
break;
}
break;
case 2:
switch(opc2)
{
case 1:
result = num * 1000000;
break;
case 2:
result = num;
break;
case 3:
result = num * 1000000 / 8;
break;
case 4:
result = num * 1000000 / 8 / 1024;
break;
case 5:
result = num * 1000000 / 8 / 1024 / 1024;
break;
case 6:
result = num * 1000000 / 8 / 1024 / 1024 / 1024;
break;
case 7:
result = num * 1000000 / 8 / 1024 / 1024 / 1024 / 1024;
break;
}
break;
case 3:
switch(opc2)
{
case 1:
result = num * 8;
break;
case 2:
result = num * 8 / 1000000 ;
break;
case 3:
result = num;
break;
case 4:
result = num / 1024;
break;
case 5:
result = num / 1024 / 1024;
break;
case 6:
result = num / 1024 / 1024 / 1024;
break;
case 7:
result = num / 1024 / 1024 / 1024 / 1024;
break;
}
break;
case 4:
switch(opc2)
{
case 1:
result = num * 1024 * 8;
break;
case 2:
result = num * 1024 * 8 / 1000000 ;
break;
case 3:
result = num *1024;
break;
case 4:
result = num;
break;
case 5:
result = num / 1024;
break;
case 6:
result = num / 1024 / 1024;
break;
case 7:
result = num / 1024 / 1024 / 1024;
break;
}
break;
case 5:
switch(opc2)
{
case 1:
result = num * 1024 * 1024 * 8;
break;
case 2:
result = num * 1024 * 1024 * 8 / 1000000 ;
break;
case 3:
result = num * 1024 * 1024;
break;
case 4:
result = num * 1024;
break;
case 5:
result = num;
break;
case 6:
result = num / 1024 / 1024;
break;
case 7:
result = num / 1024 / 1024 / 1024;
break;
}
break;
case 6:
switch(opc2)
{
case 1:
result = num * 1024 * 1024 * 1024 * 8;
break;
case 2:
result = num * 1024 * 1024 * 1024 * 8 / 1000000 ;
break;
case 3:
result = num * 1024 * 1024 * 1024;
break;
case 4:
result = num * 1024 * 1024;
break;
case 5:
result = num * 1024;
break;
case 6:
result = num;
break;
case 7:
result = num / 1024;
break;
}
break;
case 7:
switch(opc2)
{
case 1:
result = num * 1024 * 1024 * 1024 * 1024 * 8;
break;
case 2:
result = num * 1024 * 1024 * 1024 * 1024 * 8 / 1000000 ;
break;
case 3:
result = num * 1024 * 1024 * 1024 * 1024;
break;
case 4:
result = num * 1024 * 1024 * 1024;
break;
case 5:
result = num * 1024 * 1024;
break;
case 6:
result = num * 1024;
break;
case 7:
result = num;
break;
}
break;
}
/* Impresión en pantalla del resultado. */
printf("\n%f %s es igual a: %f %s\n", num
, ori
, result
, fin
);
return 0;
}