Ayuda con Vectores (solucionado)

Iniciado por jadiaz, 3 Octubre 2012, 20:07 PM

0 Miembros y 1 Visitante están viendo este tema.

jadiaz

Hola a todos soy nuevo en esto de C++ y la programacion, pero haciendo un ejercicio, encuentro que necesito ingresar nombre y apellidos en una sola linea, por lo que declaro un vector, mas me da un error, que no se como solucionar.
Deberia poder ingresar cuantos nombres voy a necesitar, luego al pedir el primer nombre  "Roman Ruiz" guardarlo en el primer espacio del vector y asi ir agregando. Creo que el problema pueda estar en la declaracion del vector o al capturar el nombre.
Si alguien puede guiarme lo agradeceria mucho.
Código (cpp) [Seleccionar]

]#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>

int a, b, c, d, noma[5], edad[15], x, y;
char nom[50];// esta[15], grup[15];
char nom1[50];
//char nom[15][25];
//string nom;

using namespace std;

void ingresa_datos ()
{
   int cont = 0;
   cout<<"     D A T O S  D E  A L U M N O S "<<endl;
   cout<<" Cuantos datos quiere ingresar <15 maximo>: ";
   cin>>a;
   for (x=0;x<=a-1;x++)
   {
       cout<<" Nombre del Alumno "<<cont+1<<" :";
       cin>>nom[x];
       cont++;
   }
  getch();
  clrscr();
}//fin

main()
{
     ingresa_datos();
    }        

leosansan

Cita de: jadiaz en  3 Octubre 2012, 20:07 PM
Deberia poder ingresar cuantos nombres voy a necesitar, luego al pedir el primer nombre  "Roman Ruiz" guardarlo en el primer espacio del vector y asi ir agregando.
El código corregido, aunque con la tan denostada función fflush, hace exactamente lo que quieres: introducir nombre y apellido que se va guardando en el array bidimensional. Supongo que existen otras soluciones más óptimas, pero lo mío no es el C++:
Código (cpp) [Seleccionar]
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>

using namespace std;

void ingresa_datos ()
{
    int a, x,cont = 0;
    cout<<"     D A T O S  D E  A L U M N O S "<<endl;
    cout<<" Cuantos datos quiere ingresar <15 maximo>: ";
    cin>>a;
    char ch,nom[100],nomb [a][100];
    for (x=0;x<=a-1;x++)
        {
            cout<<" Nombre del Alumno "<<x+1<<" :";
            fflush (stdin);
            fgets(nom,100,stdin);
            strcpy (nomb [x],nom);
        }
   for (x=0;x<=a-1;x++) /*<===Imprime los nombres introducidos*/
        cout<<nomb[x];
}

main()
{
      ingresa_datos();
}


dato000

Ya probe, funciona bien.

Ahora, |Lo que no hay que hacer en C/C++. Nivel basico|

Citar
2) fflush(stdin);

fflush(stdin) es un invitado casi diario. Pocas veces pasa un dia sin que alguien lo recomiende o lo mencione como la solucion! a los malos comportamientos de las pausas en los programas.

STDIN, como su nombre lo indica, significa 'Standard input'. Es decir, el ingreso por teclado.

Acorde al Standard, fflush espera solamente un stream de salida (STDOUT: 'Standard Output) por lo que el comportamiento con streams de entrada como STDIN es indefinido. Por mas que en algunas plataformas funcione, o que en algunos compiladores funcione, no deberia ser utilizado.

Por el otro lado, para evitar esas pausas fastidiosas es necesario evitar las funciones que dejan basura por doquier (como scanf();) y utilizar funciones como la ya mencionada fgets();

En resumen:

para que el getchar funcione, limpia el buffer,antes de poner getchar/scanf/cin/gets o alguna orden tipo input usa fflush (stdin);




elkiy

pues mira pone esto:

Código (cpp) [Seleccionar]
#include <string>
using std::string;
using std::getline;

#include <iostream>
using std::cout;
using std::endl;
using std::cin;


crea una variable en el bloque que tu quieras:

Código (cpp) [Seleccionar]
string nombre; //crea variable

para que el usuario ingrese su nombre:

Código (cpp) [Seleccionar]
cout << "Ingrese su nombre: ";
getline(cin, nombre);
cout << endl;


ok, si queres que el usuario ingrese solamente un nombre con tantos caracteres especificos haz esto.

Código (cpp) [Seleccionar]
if (nombre.length() <= 15)
{
}

else
{
nombre = nombre.substr (0,15);
cout << " se ha limitado tu nombre a los primeros 15 caracteres\n Bienvenido: ";
cout << nombre;
cout << endl;
}




leosansan

CitarMuy interesante, especialmente para mí que me muevo en C y apenas en C++. Muchas gracias por la aportación, repito :muy interesante.
Saludos!

jadiaz

Agradezco todas las respuestas quedo solucionado con la primera opcion. ;-)