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


 


Tema destacado: Página de elhacker.net en Google+ Google+


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 1,242 veces)
superkorlas

Desconectado Desconectado

Mensajes: 41



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

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 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 »

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 por Cönnectome » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.301



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

................................................
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 por leosansan » En línea

superkorlas

Desconectado Desconectado

Mensajes: 41



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

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.301



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

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 por leosansan » En línea

superkorlas

Desconectado Desconectado

Mensajes: 41



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

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

Si se puede imaginar, se puede programar.
leosansan


Desconectado Desconectado

Mensajes: 1.301



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

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 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 »

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 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 »

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.301



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

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 por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con un programa:
« Respuesta #10 en: 19 Mayo 2013, 01:02 »

Como te picas Leosan  ;-)

Es evidente, goto no es "imprescindible" pero es una herramienta que en alguna ocasiones resulta la salida más sencilla (y eficiente). Incluso Java que eliminó el goto de su repertorio permitió "algunos saltos" en determinadas circunstancias excepcionales (como la línea anterior a un for).

Yo personalmente nunca he necesitado usarlos. Pero defiendo que tiene algunos usos.
« Última modificación: 19 Mayo 2013, 01:57 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
leosansan


Desconectado Desconectado

Mensajes: 1.301



Ver Perfil
Re: Problema con un programa:
« Respuesta #11 en: 19 Mayo 2013, 02:13 »

Como te picas Leosan  ;-)

Estimado y respetado amchacon, no era un pique sino una sugerencia a posibles maneras de no usar goto en tus planteamientos.

Ya aclare que yo soy el primero en usarlo y sólo quería poner de manifiesto que su uso por comodidad no es aconsejable ni la manera más efiente en según qué situaciones.

Así que de "piques" nada de nada, y mucho menos contigo, sólo eran una pequeña y humilde aportación al tema.

Saluditos!. .... . .

En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema con un programa:
« Respuesta #12 en: 19 Mayo 2013, 02:58 »

Así que de "piques" nada de nada, y mucho menos contigo, sólo eran una pequeña y humilde aportación al tema.
¡Pero no te enfades! Que te estaba tomando el pelo ;D

Esque me acuerdo de una vez que recomendé usar nodos enlazados en vez de realloc, creo que me contestastes 3-4 veces. Cada vez yo te ponía una traba más pero siempre me devolvias la pelota  ;-)

En fin que era una broma. Es mi avatar, que me da un aire muy serio  :xD
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
superkorlas

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Problema con un programa:
« Respuesta #13 en: 22 Mayo 2013, 14:18 »

Por cierto, me dijisteis para que volviera sin usar el goto, poniendo lo de indice = 0 .....  Pero como funciona, es decir, una pequeña explicacion para saber utilizarlo yo en caso de necesidad, es que no se como funciona, simplemente lo he puesto, pero no me gusta poner cosas sin saber de donde vienen ni como usarlas xd, sabran a lo que me refiero xd.
En línea

Si se puede imaginar, se puede programar.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con un programa en c++
Programación General
geekrave 2 797 Último mensaje 13 Noviembre 2004, 23:47
por Ragnarok
Problema, con programa->HELP PLZ
Programación Visual Basic
newbY 12 1,160 Último mensaje 22 Noviembre 2006, 18:15
por newbY
problema con programa de C
Programación C/C++
murdock_ 4 785 Último mensaje 12 Abril 2007, 15:58
por murdock_
Problema programa VB
Programación Visual Basic
34Gl3 S1lV3R 2 1,040 Último mensaje 31 Enero 2008, 16:47
por Chefito
Problema con un programa
Windows
JoseRa 6 875 Último mensaje 28 Marzo 2009, 23:16
por JoseRa
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines