[C con Clase] Dudas de principiante

aJ maxell1001 en gmail.com
Vie Abr 1 19:29:12 CEST 2011


El pasado 2011-04-01 11:22:11, unpocolocos escribió:
 
u> Estoy comenzando a con el curso y estoy tratando de resolver los problemas propuestos con alguna que otra variante.
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:
u>   char *numero; // Puntero "numero" a tipo char
u>   int i = 0, j;
u>   // Declaración de prototipos
u>   bool Incrementa (char);
u>   int main()
u>   {
u>       // Reservamos en memoria dinámica una cadena de caracteres
u>       // a la que apunta "numero"
u>       numero = new char [10];
u>       // Inicializamos la cadena dinámica con caracteres '0'
u>       for (j = 0; j < 10; j++) numero [j] = '0';  numero [9] = '\0';
u>       // Introducción del número de dígitos
u>       cout << "Introduce los digitos de un numero HASTA UN MAXIMO DE 8" << endl;
u>       cout << "Para salir pulsar directamente [INTRO]" << endl;
u>       // Introducción de los caracteres de "numero"
u>       while (i < 8) {
u>           cout << "  Introduce digito " << j-9 << ": "; j++;
u>           cin >> numero [i];
u>           if (numero [i] == '\n') break;
u>           i++;
u>       }
u> ¿Qué es lo que estoy haciendo mal?
u> _______________________________________________
u> Lista de correo Cconclase Cconclase en listas.conclase.net
u> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
u> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

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..

Todo quedaría así :

#include <iostream>
using namespace std;
char *numero; // Puntero "numero" a tipo char
int i = 0, j;
int main()
{
    // Reservamos en memoria dinámica una cadena de caracteres
    // a la que apunta "numero"
    numero = new char [10];
    // Inicializamos la cadena dinámica con caracteres '0'
    for (j = 0; j < 10; j++) numero [j] = '0';  numero [9] = '\0';
    // Introducción del número de dígitos
    cout << "Introduce los digitos de un numero HASTA UN MAXIMO DE 8" << endl;
    cout << "Para salir pulsar directamente [INTRO]" << endl;
    // Introducción de los caracteres de "numero"
    cout << ">> ";
    cin.get(numero,9,'\n');
    // Imprimir "numero"
    cout << endl << "*numero : " << numero;
    delete[] numero;
    return 0;
}


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