Duda con Array c++ 2 Dimensiones y vector de profundiad char nombre[X][Y]

Iniciado por jenniferpd, 28 Septiembre 2014, 00:23 AM

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

jenniferpd

estoy iniciando en el mundo de la programacion y un amigo me dijo que empezara con c++ primero para aprender a programar, horita estoy algo confundida con un array o arreglo
le explico este es mi code:



// LIBRERIAS
#include <iostream>
using namespace std;

// Variables Globales
const int  NR = 3;
int i,j;
char nombre[10][10],apellido[10][10];


// Funcion Madre
void main(){

//test 1

cout << "Ingrese 5 Nombres y apellidos" << endl;

for (i = 0; i < NR; i++ ){

for ( j = 0; j < NR; j++){

cout << "Nombre N[" << i << "][" << j << "]: ";
cin >> nombre[i][j];
cout << "apellido N[" << i << "][" << j << "]: ";
cin >> apellido[i][j];
}
}

system("pause");
}


el ciclo for me actua bien es decir asi:
primer ciclo de la i=0 y dentro se ejecuta la j hasta 3 veces
[0 ][0 ] Nombre:
[0 ][0 ] apellido:
[0 ][1 ] Nombre:
[0 ][1 ] apellido:
[0 ][ 2] Nombre:
[ 0][2 ] apellido:
[0 ][3 ] Nombre:
[0 ][3 ] apellido:
segundo ciclo de la i=1
[1][0] Nombre:
[1][0] apellido:
[1][1] Nombre:
[1][1] apellido:
[1][2] Nombre:
[1][2] apellido:
[1][3] Nombre:
[1][3] apellido:
i = etc...
por favor corrijan me si estoy errada es asi verdad?

1)bueno el problema es el siguiente:
cuando ingreso 1 sola letra el se ejecuta bien pero cuando ingreso un nombre como jennifer se vuelve loco no entiendo xq

2) no se supone que nombre [x ] [y ]
x= numero de filas
y= numero de columnas
hay yo tengo un arreglo
nombre: 3x3 = 9 nombres
apellidos: 3x3 = 9 apellidos?

3) char nombre [a ][b ] esto no es un vector de profundidad? xq solo me deja guarda 1 letra?
a = total de filas
b= tatal de caracteres que se guardan en cada casilla?


estoy enredada por favor aclaren mis dudas y gracias!

milx86

#1
Hola, yo lo hize asi
Código (cpp) [Seleccionar]

// LIBRERIAS
#include <iostream>
#include <stdio.h>
using namespace std;

// Variables Globales
const int  NR = 2;
int i,j;
char nombre[10][10];
char apellido[10][10];

// Funcion Madre
int main(void){


cout << "Ingrese 5 Nombres y apellidos" << endl;

for (i = 0; i < NR; i++ ){
cout << "Nombre [" << i << "]: ";
cin >> nombre[i];
fflush(stdin);
cout << "apellido [" << i << "]: ";
cin >> apellido[i];
fflush(stdin);
}

for (i = 0; i < NR; i++ ){
cout << "Nombre [" << i << "]: ";
cout << nombre[i] << endl;
cout << "Apellido [" << i << "]: ";
cout << apellido[i] << endl ;

}
return 0;
}


Salida:

Ingrese 2 Nombres y apellidos
Nombre [0]: Perico
apellido [0]: Palo
Nombre [1]: Brujo
apellido [1]: Brujito
Nombre [0]: Perico
Apellido [0]: Palo
Nombre [1]: Brujo
Apellido [1]: Brujito


Estas creando un arreglo bidimensional de 10 filas por 10 columnas.
Por lo que te da para:
                          Pos Colum.
                          0123456789
Apellido [cero] ="dasd56789X"
Apellido [2] =    "huu456789X"
  .. ...
Apellido [9] =    "gvvb56789X"
Entonces no creo que debas manejar el indice de las columnas.

Ahora el problema que tambien tenia era acerca del buffer(creo xD).
[youtube=540,360]https://www.youtube.com/watch?v=AFcvGLEMgFU[/youtube]

Saludos  :D
La abstracción es la clave para lidiar con la complejidad.

rir3760

Cita de: free_c0de en 28 Septiembre 2014, 01:16 AMAhora el problema que tambien tenia era acerca del buffer(creo xD).
En C++ para descartar el resto de la linea (introducida vía la entrada estándar) se puede utilizar un bucle o bien las funciones sync o ignore, ejemplos de ellos existen en la base de datos de los foros, solo hay que utilizar el motor de búsqueda.

El uso de fflush(stdin) en C y C++ no se recomienda, las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language