[C con Clase] Dudas de principiante

unpocolocos unpocolocos en live.com
Lun Abr 4 12:14:19 CEST 2011


El pasado 2011-04-01 17:29:12, aJ escribió:
 
a> El pasado 2011-04-01 11:22:11, unpocolocos escribió:
a>  
a> u> Estoy comenzando a con el curso y estoy tratando de resolver los problemas propuestos con alguna que otra variante.
a> u> Concretamente, estoy intentando (sin conseguirlo) detener la introducción de caracteres (cuando se pulse la tecla "INTRO" sin haber introducido un número o letra) en un array dinámico de caracteres. Es decir:
a> u>   char *numero; // Puntero "numero" a tipo char
a> u>   int i = 0, j;
a> u>   // Declaración de prototipos
a> u>   bool Incrementa (char);
a> u>   int main()
a> u>   {
a> u>       // Reservamos en memoria dinámica una cadena de caracteres
a> u>       // a la que apunta "numero"
a> u>       numero = new char [10];
a> u>       // Inicializamos la cadena dinámica con caracteres '0'
a> u>       for (j = 0; j < 10; j++) numero [j] = '0';  numero [9] = '\0';
a> u>       // Introducción del número de dígitos
a> u>       cout << "Introduce los digitos de un numero HASTA UN MAXIMO DE 8" << endl;
a> u>       cout << "Para salir pulsar directamente [INTRO]" << endl;
a> u>       // Introducción de los caracteres de "numero"
a> u>       while (i < 8) {
a> u>           cout << "  Introduce digito " << j-9 << ": "; j++;
a> u>           cin >> numero [i];
a> u>           if (numero [i] == '\n') break;
a> u>           i++;
a> u>       }
a> u> ¿Qué es lo que estoy haciendo mal?
a> u> _______________________________________________
a> u> Lista de correo Cconclase Cconclase en listas.conclase.net
a> u> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
a> u> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
a> 
a> He revisado tu código y faltan algunas cosas.. como el 'delete[] numero' siempre que asignes memoria dinámica debes liberarla al finalizar el programa, en tu caso que lo asignaste en forma de arreglo para liberarlo usas 'delete[] puntero' y para finalizar una introducción de datos sin haber introducido algo puedes usar esto → 'cin.get(numero,9,'\n');' donde número es el puntero, 9 la cantidad que caracteres que va leer a la final solo va tomar 8 como tu indicas, el carácter 9 es nulo y '\n' el carácter delimitador que sería el "INTRO".. puedes conseguir info relacionada en el mismo curso → http://bit.ly/ij0tjd y 'bool Incrementa (char);' lo elimine por que no esta haciendo nada..
a> 
a> Todo quedaría así :
a> 
a> #include <iostream>
a> using namespace std;
a> char *numero; // Puntero "numero" a tipo char
a> int i = 0, j;
a> int main()
a> {
a>     // Reservamos en memoria dinámica una cadena de caracteres
a>     // a la que apunta "numero"
a>     numero = new char [10];
a>     // Inicializamos la cadena dinámica con caracteres '0'
a>     for (j = 0; j < 10; j++) numero [j] = '0';  numero [9] = '\0';
a>     // Introducción del número de dígitos
a>     cout << "Introduce los digitos de un numero HASTA UN MAXIMO DE 8" << endl;
a>     cout << "Para salir pulsar directamente [INTRO]" << endl;
a>     // Introducción de los caracteres de "numero"
a>     cout << ">> ";
a>     cin.get(numero,9,'\n');
a>     // Imprimir "numero"
a>     cout << endl << "*numero : " << numero;
a>     delete[] numero;
a>     return 0;
a> }
a> _______________________________________________
a> Lista de correo Cconclase Cconclase en listas.conclase.net
a> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
a> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

Muchísimas gracias por tu respuesta. El código enviado era justo lo que necesitaba.
Efectivamente, faltaban algunas cosas (y sobraban otras) pues el código aportado era sólo la parte inicial de introducción de datos (donde tenía el problema)del ejercicio. Perdón por el lío.


Más información sobre la lista de distribución Cconclase