[ Foro de C++ ]

No encuentro una buena forma de introducir cadenas de caracteres y poder validarlas

11-Aug-2020 03:36
Invitado (Efren)
0 Respuestas

La manera en  que introduzco una cadena de caracteres es la siguiente:
Declaro un char nombre[cantidad de caracteres que debe tener + 1]
Al momento de introducirlo lo hago con un cin.getline(nombre de la cadena, cantidad de caracteres, '\n')
Pero al momento de validarlo es un problemón.

Si quiero validar que el usuario no introduzca más caracteres de los establecidos, con ayuda de un strlen y un while hago que tenga que introducir 7 caracteres, todo bien si introduce menos de 7, si funciona la validación, pero si introduce más de 7 caracteres se salta todas las siguientes instrucciones y no funciona la validación.

Así que si alguien sabe de una mejor forma de introducir cadenas de caracteres y validarlas sin tantos problemas, por favor enseñeme.

Adjunto mi programa, después de introducir el codigovideojuego es donde está la validación de que les mencionaba. Gracias.

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

using namespace std;




void main() {

struct
{
char nombrevideojuego[100];
char codigovideojuego[8];
char clasificacion[5];
char precio[9];
char rentaoventa[6];
} videojuegos[500];

int opcionmenu, i=0;
int contadorcodigo = 0, longitudcodigo = 0;

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

switch (opcionmenu) {

case 1:

cout << "Introduzca el codigo del videojuego" << endl;
cin.getline(videojuegos[i].codigovideojuego, 8, '\n');
//INICIA VALIDACION DEL CODIGO DEL VIDEOJUEGO

longitudcodigo = strlen(videojuegos[i].codigovideojuego);

while (longitudcodigo != 7) {

system("CLS");
cout << "El codigo debe tener 7 digitos, usted introdujo " << longitudcodigo << " digitos" << endl;
cin.getline(videojuegos[i].codigovideojuego, 8, '\n');
longitudcodigo=strlen(videojuegos[i].codigovideojuego);
}


//TERMINA VALIDACION DEL CODIGO DEL VIDEOJUEGO
cout << endl << endl;

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

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(videojuegos[i].clasificacion, 5, '\n');

cout << endl << endl;

cout << "Introduzca el precio" << endl;
cin.getline(videojuegos[i].precio, 9, '\n');

cout << endl << endl;

cout << "Introduzca si es venta o renta" << endl;
cin.getline(videojuegos[i].rentaoventa, 6, '\n');


system("CLS");

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

case 3:
exit(0);
break;

default: cout << "No existe esa opcion" << endl;

}
system("PAUSE>null");
}




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