elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con un programa:
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema con un programa:  (Leído 3,791 veces)
Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Problema con un programa:
« en: 16 Mayo 2013, 21:47 pm »

Hola a todos muy buenas, me estoy iniciando en el mundillo de la programacion y me ha surgido un problemilla y es que no consigo hacer que un programa me compare dos  cadenas. Este es el codigo agradeceria una ayudita sobre en que me he confundido.  [Tiene muchos "cout << endl", es por pura estetica xd]
La finalidad del programa es que introduzcas un nombre y un telefono de 4 personas, y luego poder realizar la busqueda introduciendo su nombre (y te da el numero) o introduciendo el numero ( y te da el nombre). Pero cuando meto algun nombre o numero siempre me da la respuesta del primero que he introducido, y no el que corresponde :huh:. Gracias por adelantado   :rolleyes:

Código:
#include <iostream>
#include <cstring>
using namespace std;
struct A {
       char Nombre[40];
       int Telefono;
       } Fulanito[4];
int main()
{
    int i;
    int z;
    char buscaNombre[40];
    int buscaTel;
  for (i = 0; i < 4; i++)  
  {
     cout << " Introduce el nombre de la persona: ";cin >> Fulanito[i].Nombre; cout << endl;
     cout << " Introduce el numero telefonico de " << Fulanito[i].Nombre<< ": "; cin >> Fulanito[i].Telefono; cout << endl << endl; cin.get();
  }
  
  cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl;
  

Bucle:
  cout << "   ******************** MENU *********************      " << endl << endl; cout << endl << endl << endl;
  cout << "           1) Buscar por nombre                 " << endl << endl;
  cout << "           2) Buscar por numero                 " << endl << endl;
  cout << "           3) Salir                             " << endl << endl;
 
 
cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl;
  cout << " Que desea realizar: "; cin >> z; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl; cout << endl << endl << endl;
  
  
  if (z == 3) return 0;
  
  if (z == 1)
  {
        cout << " Introduce el nombre de la persona que desea buscar: ";
        cin >> buscaNombre; cout << endl << endl; cin.get();
        
        for (i = 0; i < 4 ;i++)
        {
            if (strcmp(Fulanito[i].Nombre, buscaNombre)==0); cout <<"    Telefono de "<< Fulanito[i].Nombre <<": " << Fulanito[i].Telefono; cout << endl << endl << endl;        
              cin.get(); goto Bucle;
        }
  }
  if (z == 2)
  {
        cout << " Introduce el numero de la persona que desea buscar: ";
        cin >> buscaTel; cout << endl << endl; cin.get();
        for (i = 0; i<4 ;i++)
        {
            if ((buscaTel, Fulanito[i].Telefono)==0); cout << " Nombre: " << Fulanito[i].Nombre; cout << endl << endl << endl;
              cin.get(); goto Bucle;
        }
  }
  cin.get();
  return 0;
}






PD: es en c++ jeje :silbar:


« Última modificación: 19 Mayo 2013, 11:54 am por superkorlas » En línea

Si se puede imaginar, se puede programar.
Cönnectome

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Problema con un programa:
« Respuesta #1 en: 16 Mayo 2013, 22:01 pm »

Te compila?, veo que tienes varios errores, como:

Código:
cout << " Introduce el nombre de la persona: ";cin >> Fulanito.Nombre[i]; cout << endl;

Cuando intentas acceder a un array, tienes que decirle a QUE POSICION QUIERES ACCEDER., es decir, Fulanito.Nombre[posicion].

Eso en todos los que tengas.

Luego, para evitarte muchos cout << endl;, puedes hacer una funcion simple como la siguiente:

Código:
void MuchosCout(int numerodecouts)
{
    for(int i=0;i<numerodecouts;++i)
       cout << endl;
}

Luego, he visto otra cosa, como:

Código:
if ((buscaTel, Fulanito.Telefono)==0);

Varias cosas. Primero, la coma?, que es lo que quieres condicionar. Luego, el ; del final, si quieres que accede el bloque {}, tienes que quitarlo, ya que el compilador lo interpreta como una final de sentencia, y solo hace una "condicion", y no hace nada en el caso de que esta condición se cumpliera.

Y por último. OBLIDATE ABSOLUTAMENTE DE LOS GOTO. Son horrorosos. En cualquier lugar veras que no son nada recomendables, ya que dificulta la lectura de un programa.

Espero que esto resuelve tu problema. Y sino, corrige, y luego vuelve a preguntar!.

Saludos,


Cönnectome




« Última modificación: 16 Mayo 2013, 22:05 pm por Cönnectome » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con un programa:
« Respuesta #2 en: 16 Mayo 2013, 23:01 pm »

................................................
Luego, para evitarte muchos cout << endl;, puedes hacer una funcion simple como la siguiente:

Código:
void MuchosCout(int numerodecouts)
{
    for(int i=0;i<numerodecouts;++i)
       cout << endl;
}


Muy acertada la función. Aunque creo que lo que pretende es "pasar" líneas hasta que no se vea lo anterior y para eso yo le aconsejaría usar system("cls") para limpiar la pantalla, suponiendo esté en Windows y, eso sí, incluir la librería <cstdlib> para su uso.



Te compila?, veo que tienes varios errores, como:
Código:
cout << " Introduce el nombre de la persona: ";cin >> Fulanito.Nombre; cout << endl;

Cuando intentas acceder a un array, tienes que decirle a QUE POSICION QUIERES ACCEDER., es decir, Fulanito.Nombre[posicion].

Totalmente de acuerdo, pero es Fulanito[posicion].Nombre y aún en ese supuesto sí los tiene puestos. El problema radica en que al pegar el código sin usar las etiquetas GeSHi de C++, por favor usarlas y pegar el código en medio de esas etiquetas, pues a lo que iba, al no usar las susodichas etiquetas el código le sale en cursiva y se "come" los índices. Si editas su mensaje veras que si están puestos.

Saluditos!. .....  
« Última modificación: 17 Mayo 2013, 09:31 am por leosansan » En línea

Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Problema con un programa:
« Respuesta #3 en: 17 Mayo 2013, 00:42 am »

Muchisimas gracias era eso lo que me pasaba, que despues del (strcmp(......)); tenia que poner { , para que si cumpliera la condicion   :-X , y lo de la posicion del array como bien ha dicho si las tengo puestas pero no se porque no han salido xd
Bueno y para evitar el goto Bucle (que incluso en el manual que estoy leyendo me dice que lo evite) como lo sustituiria  :huh: . Y en cuanto a lo de tantos endl es por que quiero que se limpie la pantalla, me podrias explicar como usaria lo que has puesto del cls ???
Muchas gracias por la ayuda :)
En línea

Si se puede imaginar, se puede programar.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con un programa:
« Respuesta #4 en: 17 Mayo 2013, 08:26 am »

Bueno y para evitar el goto Bucle (que incluso en el manual que estoy leyendo me dice que lo evite) como lo sustituiria  :huh: . Y en cuanto a lo de tantos endl es por que quiero que se limpie la pantalla, me podrias explicar como usaria lo que has puesto del cls ???
Muchas gracias por la ayuda :)

Mejor lo ves:

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #define N      4
  5.  
  6. using namespace std;
  7. struct Fulanito {
  8.       char Nombre[40];
  9.       int Telefono;
  10.       } Fulanito[N];
  11. int main()
  12. {
  13.  
  14.    int i,z,buscaTel=0,indice;
  15.    char buscaNombre[40]={0};
  16.    for (i = 0; i < N; i++)
  17.        {
  18.            cout << " Introduce el nombre de la persona " << i+1 <<" de "<< N <<" :";
  19.            cin >> Fulanito[i].Nombre; cout << endl;
  20.            cout << " Introduce el numero telefonico de " << Fulanito[i].Nombre<< ": ";
  21.            cin >> Fulanito[i].Telefono;
  22.            cout << endl << endl;
  23.        }
  24.  
  25.    system("cls");
  26.  
  27.    while(1) {
  28.        indice=0;
  29.        cout << "   ******************** MENU *********************      " << endl << endl << endl << endl << endl;
  30.        cout << "           1) Buscar por nombre                 " << endl << endl;
  31.        cout << "           2) Buscar por numero                 " << endl << endl;
  32.        cout << "           3) Salir                             " << endl << endl;
  33.  
  34.        cout << " Que desea realizar: "; cin >> z;
  35.        system("cls");
  36.        if (z == 3) return 1;
  37.  
  38.        else if (z == 1)
  39.      {
  40.            cout << " Introduce el nombre de la persona que desea buscar: ";
  41.            cin >> buscaNombre; cout << endl << endl;
  42.  
  43.            for (i = 0; i < N ;i++)
  44.            {
  45.                if (strcmp(Fulanito[i].Nombre, buscaNombre)==0){
  46.                    cout <<"    Telefono de "<< Fulanito[i].Nombre <<": " << Fulanito[i].Telefono;
  47.                    cout << endl << endl << endl;
  48.                    indice++;
  49.                }
  50.            }
  51.            if (indice==0)
  52.                cout << "No existe en la base esa persona"<< endl<< endl<< endl;
  53.      }
  54.      else if (z == 2)
  55.      {
  56.            cout << " Introduce el numero de la persona que desea buscar: ";
  57.            cin >> buscaTel; cout << endl << endl;
  58.            for (i = 0; i<N ;i++)
  59.            {
  60.                if ((buscaTel==Fulanito[i].Telefono)){
  61.                    cout << " Nombre: " << Fulanito[i].Nombre;
  62.                    cout << endl << endl << endl;
  63.                    indice++;
  64.                }
  65.            }
  66.            if (indice==0)
  67.                cout << "No existe en la base ese numero"<< endl<< endl<< endl;
  68.      }
  69.      else
  70.        cout<<"Opcion equivocada"<<endl<<endl<< endl;
  71.    }
  72.  return 0;
  73. }
  74.  

Saluditos!. ....
« Última modificación: 17 Mayo 2013, 09:28 am por leosansan » En línea

Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Problema con un programa:
« Respuesta #5 en: 17 Mayo 2013, 09:09 am »

muchas gracias ya funciona perfectamente!!!!!  ;-)
En línea

Si se puede imaginar, se puede programar.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con un programa:
« Respuesta #6 en: 17 Mayo 2013, 09:38 am »

muchas gracias ya funciona perfectamente!!!!!  ;-)

Lo reedite buscando la mejora visual. Espero hayas pillado "la última edición" y me alegra que te haya servido.

Saluditos!. ....
« Última modificación: 17 Mayo 2013, 09:40 am por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con un programa:
« Respuesta #7 en: 17 Mayo 2013, 18:50 pm »

Y por último. OBLIDATE ABSOLUTAMENTE DE LOS GOTO. Son horrorosos. En cualquier lugar veras que no son nada recomendables, ya que dificulta la lectura de un programa.
Ojo goto si que tiene sus usos (al igual que las variables globales). Por ejemplo si tenemos un montón de bucles anidados y queremos forzar su repetición en caso de error:

Código
  1. repetir:
  2.  
  3. for (int i = 0; i < 30; i++)
  4.   for (int j = 0; j < 30; j++)
  5.      for (int k = 0; k < 30; k++)
  6.         for (int l = 0; l < 30; l++)
  7.             if (Matriz[i][j][k][l] == ERROR)
  8.                      goto repetir;
  9.  
  10.  

También podría servir para forzar la salida en caso de que encontremos el resultado (recordemos que un break solo serviría para el primer for).
« Última modificación: 17 Mayo 2013, 18:52 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Cönnectome

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Problema con un programa:
« Respuesta #8 en: 18 Mayo 2013, 16:03 pm »

Totalmente de acuerdo[/b], pero es Fulanito[posicion].Nombre hes.com/foro/images/smilies/aaaaa.gif[/img]

Es verdad!. Aaaah!. Gracias por la corrección.

Ojo goto si que tiene sus usos (al igual que las variables globales). Por ejemplo si tenemos un montón de bucles anidados y queremos forzar su repetición en caso de error:

Código
  1. repetir:
  2.  
  3. for (int i = 0; i < 30; i++)
  4.   for (int j = 0; j < 30; j++)
  5.      for (int k = 0; k < 30; k++)
  6.         for (int l = 0; l < 30; l++)
  7.             if (Matriz[i][j][k][l] == ERROR)
  8.                      goto repetir;
  9.  
  10.  

También podría servir para forzar la salida en caso de que encontremos el resultado (recordemos que un break solo serviría para el primer for).


Mmmmh, interesante. Pensaba que goto (sinceramente), no servia para nada, por que pensava que todo lo que utiliza goto lo podrias sustituir con un simple break o continue o una simple condición if, pero vista la posibilidad de bucles anidados, me tendré que replantear su uso.  Gracias ! :)

Saludos

Cönnectome

En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con un programa:
« Respuesta #9 en: 18 Mayo 2013, 21:18 pm »

Ojo goto si que tiene sus usos (al igual que las variables globales). Por ejemplo si tenemos un montón de bucles anidados y queremos forzar su repetición en caso de error:

Código
  1. repetir:
  2.  
  3. for (int i = 0; i < 30; i++)
  4.   for (int j = 0; j < 30; j++)
  5.      for (int k = 0; k < 30; k++)
  6.         for (int l = 0; l < 30; l++)
  7.             if (Matriz[i][j][k][l] == ERROR)
  8.                      goto repetir;
  9.  
  10.  

En caso de error en la introducción de un dato siempre podemos recurrir a :

Código
  1. for (int i = 0; i < 30; i++)
  2.   for (int j = 0; j < 30; j++)
  3.      for (int k = 0; k < 30; k++)
  4.         for (int l = 0; l < 30; l++)
  5.             if (Matriz[i][j][k][l] == ERROR){
  6.                puts("error");
  7.                l--;
  8.                }

Citar
También podría servir para forzar la salida en caso de que encontremos el resultado (recordemos que un break solo serviría para el primer for).

Y si quisiéramos salir, ya que con un break no se puede, podemos recurrir al uso de banderas o flags, tantas como deseemos, como ejemplo esta salida de un triple bucle:

Código
  1. a[0][0][0]= 10
  2. a[0][0][1]= 12
  3. a[0][0][2]= 15
  4. Sali de los bucles

del código de muestra que pongo a continuación:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int i,j,k,flag=0,a[30][30][30];
  6.        for (i=0;i<30 && flag==0;i++)
  7. for (j=0;j<30 && flag==0;j++)
  8. for (k=0;k<30 && flag==0;k++){
  9. printf("a[%d][%d][%d]= ",i,j,k);
  10.                                scanf("%d",&a[i][j][k]);
  11.                                if (a[i][j][k]==15)
  12.                                   flag++;
  13. }
  14.  
  15.    puts("Sali de los bucles");
  16.    return 0;
  17. }
  18.  

Y combinando flags y while o Do-While podemos hacer virguerias. Todo es cuestión de imaginación.

Todo lo dicho anteriormente no es una crítica al uso del goto, por algo está implementado en el lenguaje, sino a su abuso o uso innecesario en determinadas situaciones que con un poco de habilidad nos evita su uso y los posibles "efectos colaterales" que pueda originar si no se está al loro de dónde poner las etiquetas etc.

Resumiendo, yo lo uso en determinadas situaciones, aunque siempre le busco la vuelta para no tener que usarlo.

Saluditos!...... ...
« Última modificación: 18 Mayo 2013, 23:19 pm por leosansan » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema, con programa->HELP PLZ « 1 2 »
Programación Visual Basic
newbY 12 4,512 Último mensaje 22 Noviembre 2006, 18:15 pm
por newbY
Problema programa VB
Programación Visual Basic
34Gl3 S1lV3R 2 2,170 Último mensaje 31 Enero 2008, 16:47 pm
por Chefito
Problema con un programa
Ingeniería Inversa
azazael 8 3,858 Último mensaje 4 Julio 2008, 10:23 am
por apuromafo CLS
Problema en mi programa (PIC)
Electrónica
laluchi 5 4,524 Último mensaje 30 Octubre 2008, 20:01 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines