Veo varios errores en tu código, tantos que no creo que tu programa haya siquiera compilado correctamente.
Te escribo algunos, aunque seguramente tendrás que seguir dándole vueltas al tema hasta conseguir que funcione correctamente:
- la estructura que propones, de un
"case" por cada dígito recibido, se podría simplificar bastante si te aprovechas de los códigos ASCII. Puesto que el
char "0" está justo delante del
char "1" y así sucesivamente hasta el
char "9", cualquier dígito en formato
char tiene su traducción a formato
int con esta simple fórmula:
valor_leido = char_leido - '0';
- en cualquier caso, si insistes en usar el
"case", tendrás que poner un
"break" en cada bloque. Mira la sintaxis correcta:
switch (cmd) {
break;
break;
break; }
- Aquí te falta el signo de multiplicación:
decena=decena10; // multiplico decena por 10
- en todos los IF que has usado, has intentado comprobar el valor de "k" con el signo "=", pero en C cuando se utiliza sólo un signo "=" significa asignación, aún cuando esté dentro de un IF. Para comprobar un valor hay que usar el operador "==".
case '3' : if (k==1)
unidad=c;
else
decena=c;