[ Foro de C++ ]

Al introducir por medio de un cin.getline no detecta el último caracter y se salta todas las siguientes instrucciones

04-Aug-2020 06:08
Invitado (Jesus)
3 Respuestas

Tengo este programa.
Cuando tengo que introducir la clasificiacion y pongo por ejemplo E+10,  no detecta el 0 y omite todas las siguientes instrucciones. También me pasa que tengo que dar doble Enter después de cada cin.getline


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

using namespace std;

void main() {

	char nombrevideojuego[100], codigovideojuego[8], clasificacion[4], precio[6], rentaoventa[5];
	int opcionmenu;


	cout << "Tienda de videojuegos" << endl << endl;
	cout << "Ingrese 1 para agregar un videojuego" << endl;
	cout << "Ingrese 2 para salir" << endl;
	cin >> opcionmenu;
	cin.ignore();
	system("CLS");

	switch (opcionmenu) {
		
	case 1:

		cout << "Introduzca el codigo del videojuego" << endl;
		cin.getline(codigovideojuego, 8, '\n');
		cin.ignore();
		cout << endl << endl;

		cout << "Introduzca el nombre del videojuego" << endl;
		cin.getline(nombrevideojuego, 100, '\n');
		cin.ignore();
		cout << endl << endl;

		cout << "Introduzca la clasificacion" << endl;
		cout << "E: Todos, E+10: Todos +10, T: Adolescentes, M: Maduro +17, Ao: Adultos unicamente +18, RP: Aun sin clasificar" << endl;
		cin.getline(clasificacion, 4, '\n');
		cin.ignore();
		cout << endl << endl;

		cout << "Introduzca el precio" << endl;
		cin.getline(precio, 6, '\n');
		cin.ignore();
		cout << endl << endl;

		cout << "Introduzca si es venta o renta" << endl;
		cin.getline(rentaoventa, 5, '\n');
		cin.ignore();
		
		system("CLS");

		cout << "Videojuego agregado correctamente" << endl << endl;
		cout << "Codigo del videojuego: " << codigovideojuego << endl;
		cout << "Videojuego: " << nombrevideojuego << endl;
		cout << "Clasificacion: " << clasificacion << endl;
		cout << "Precio: " << precio << endl;
		cout << "Es: " << rentaoventa << endl << endl << endl;
		break;

	case 2:
		exit(0);
		break;
		
	default: cout << "No existe esa opción" << endl;

	}
	system("PAUSE>null");
}


 


04-Aug-2020 10:42
Nacho Cabanes (+84)

Las cadenas "al estilo C" terminan con un carácter nulo. Por tanto, algo como " clasificacion[4]" sólo permitirá 3 caracteres útiles. Si guardas más de 3, el programa se comportará de forma incorrecta.

Prueba a añadir uno a todos los tamaños.


04-Aug-2020 23:16
Invitado (Jesus)

Gracias Nacho Cabanes, ya entiendo por qué pasa y pude solucionarlo, a cada cin.getline en cantidad máxima de caracteres les aumenté 1, pero en la declaración los dejé igual como estaba y funcionó, crees que genere problemas?


05-Aug-2020 00:22
Nacho Cabanes (+84)

Indudablemente estas tentando problemas. Para leer n letras, debes reservar n+1 y leer n.Si lo haces de otra forma,quizá se comporte casualmente de forma correcta,según como tu Compilador asigne la memoria... Pero será casualidad...






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)