[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