[Problema] Incorrecta selección del Switch.

Iniciado por Zodiak98, 30 Septiembre 2015, 02:15 AM

0 Miembros y 1 Visitante están viendo este tema.

Zodiak98

Verán, estoy haciendo un programa que lo que hace es que si escribes cierta cantidad en números, este los traslada a letras, por ejemplo: 16 - "dieciséis".

Por ahora sólo estoy con decenas, ya luego lo haré con números mayores, pero tengo un problema, hay valores que sí funcionan, y otros que no. Por ejemplo, 54, 88, 19, y otros con los que no funcionan. Por ejemplo, 18, 87, 84. Al escribir esos números (y otros varios) me manda a la condición incorrecta y escribe lo que no debería.

Las 2 líneas que están en comentario fueron de una prueba para asegurarme que le estaba pasando el parámetro correcto a la función, y ver qué valor tomaba la variable lAux, que efectivamente en algunos casos, toma el incorrecto, por ejemplo, a veces cuando le paso 7 me devuelve un "seis".

Acá les dejaré el código que llevo:

Código (cpp) [Seleccionar]

#include <iostream>
#include <string.h>

using namespace std;

string lNumero(int i);
void decimas(int num);

int main(void) {

    int num = 0;

    cout << "Escribe un numero: ";
        cin >> num;

    decimas(num);
    cout << endl;

    return 0;
}

void decimas(int num) {
    float aux = (float)num/10;
    num /= 10;
    aux = (aux - num) * 10;

    string lAux = lNumero(aux);
    //cout << lAux << endl;
    //cout << aux << endl;

    switch(num) {
    case 0:
        cout << lAux;
    break;
    case 1:
        switch((int)aux) {
            case 0: cout << "diez"; break;
            case 1: cout << "once"; break;
            case 2: cout << "doce"; break;
            case 3: cout << "trece"; break;
            case 4: cout << "catorce"; break;
            case 5: cout << "quince"; break;
            default: cout << "dieci" << lAux; break;
        }
    break;
    case 2:
        if (aux == 0) cout << "veinte";
        else cout << "veinti" << lAux;
    break;
    case 3:
        if (aux == 0) cout << "treinta";
        else cout << "treinta y " << lAux;
    break;
    case 4:
        if (aux == 0) cout << "cuarenta";
        else cout << "cuarenta y " << lAux;
    break;
    case 5:
        if (aux == 0) cout << "cincuenta";
        else cout << "cincuenta y " << lAux;
    break;
    case 6:
        if (aux == 0) cout << "sesenta";
        else cout << "sesenta y " << lAux;
    break;
    case 7:
        if (aux == 0) cout << "setenta";
        else cout << "setenta y " << lAux;
    break;
    case 8:
        if (aux == 0) cout << "ochenta";
        else cout << "ochenta y " << lAux;
    break;
    case 9:
        if (aux == 0) cout << "noventa";
        else cout << "noventa y " << lAux;
    break;
    }
}

string lNumero(int i) {
    switch(i) {
    case 1: return "uno";
    case 2: return "dos";
    case 3: return "tres";
    case 4: return "cuatro";
    case 5: return "cinco";
    case 6: return "seis";
    case 7: return "siete";
    case 8: return "ocho";
    case 9: return "nueve";
    }
    return "cero";
}


0xFer

#1
Para sacar el último dígito de un número basta con utilizar el operador de módulo aux = num %10;

Código (cpp) [Seleccionar]

void decimas(int num) {
 
  int aux = num%10;
  num /= 10;
 
  string lAux = lNumero(aux);
  .
  .
  .
}

modifica eso y estás listo.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}