Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Acciones recojiendo siempre la misma letra ?

Estas en el tema de Acciones recojiendo siempre la misma letra ? en el foro de C/C++ en Foros del Web. Tengo una duda de funciones/acciones : Si las acciones recojen un int pero en todas tengo la misma letra es correcto ? ejemplo : void ...
  #1 (permalink)  
Antiguo 03/05/2012, 11:12
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Acciones recojiendo siempre la misma letra ?

Tengo una duda de funciones/acciones :

Si las acciones recojen un int pero en todas tengo la misma letra es correcto ?

ejemplo :

void funcion1 (int i){...}
void funcion2 (int i){...}
void funcion3 (int i){...}
void funcion4 (int i){...}

Porque pierdo el valor de una .

Primero creo y luego busco hasta aquí bien :)

Luego entro en otra accion y pierdo el valor de buscar y me dice que no existe

Es por eso o por otra cosa ?
  #2 (permalink)  
Antiguo 03/05/2012, 11:19
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Acciones recojiendo siempre la misma letra ?

A que te refierres con la misma letra?? Si lo que quieres es cambiar ese entero cuando la funcion termina tienes que usar punteros..
si es otra cosa lo que quieres hacer , por favor pon un mejor ejemplo.

Saludos
  #3 (permalink)  
Antiguo 03/05/2012, 11:39
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Acciones recojiendo siempre la misma letra ?

Cita:
Iniciado por sam90 Ver Mensaje
A que te refierres con la misma letra?? Si lo que quieres es cambiar ese entero cuando la funcion termina tienes que usar punteros..
si es otra cosa lo que quieres hacer , por favor pon un mejor ejemplo.

Saludos
Voy a ver si me explico bien :

1 - Creo 1 contacto + telf
2 - Muestro el contacto
3 - Elimno el contacto
4 - Introducir telf (de aquella persona)
5 - salir

Cuando entro en la 4 (solamente entrar) la 2 no me funciona(me dice que no existe) sin hacer ningún cambio , pero si funciona siempre en la 4 , que paso el valor de la 2 a la 4 ? impossible .

La 4 me muestra bien que el nombre existe y todo

Última edición por drakgoku1; 03/05/2012 a las 11:49
  #4 (permalink)  
Antiguo 03/05/2012, 12:08
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Acciones recojiendo siempre la misma letra ?

Por lo que veo algun problema de punteros o definiciones de variables tienes que tener. Seria necesario que muestre elcodigo para poder ayudarte.

Saludos
  #5 (permalink)  
Antiguo 03/05/2012, 12:26
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Acciones recojiendo siempre la misma letra ?

Cita:
Iniciado por sam90 Ver Mensaje
Por lo que veo algun problema de punteros o definiciones de variables tienes que tener. Seria necesario que muestre elcodigo para poder ayudarte.

Saludos
las 169 lineas ? es demasiado :D
  #6 (permalink)  
Antiguo 03/05/2012, 12:30
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Acciones recojiendo siempre la misma letra ?

No hay otra, adivino no somos....
  #7 (permalink)  
Antiguo 03/05/2012, 12:32
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Acciones recojiendo siempre la misma letra ?

Ok pongo el código : Necessito ver por que pierdo el resultado de la 2 a la 4 y tampoco inserto los numeros a la 4 esta comentado :D

Código C:
Ver original
  1. #include      <conio.h>
  2. #include      <stdio.h>
  3. #include      <stdlib.h>
  4. #include      <string.h>
  5.  
  6. #define       MAX 30
  7.  
  8.  
  9. struct        agenda {
  10.     char      nom[MAX+1];
  11.     char      telf[MAX][10];
  12.  
  13. }persona[100];
  14.  
  15.     void      leerentrada(int);
  16.     void      escribirsalida(int);
  17.     void      menu(void);
  18.     void      buscar_persona(int);
  19.     void      borrar_persona(int);
  20.     void      escriure_entrada(int);
  21.  
  22.                                     /*! programa principal */
  23. int main ( void ) {
  24.  
  25.         menu ();
  26.         system ("PAUSE");
  27.  
  28.     return 0;
  29. }
  30.  
  31. void leerentrada(int i){
  32.     /*! Guardar per cada entrada com?*/
  33.     int x=0,n,in=0;
  34.     x=i; /*! Contar els usuaris */
  35.     printf     ("\n\t Persona -------->: %d \n\n",x=x+1);
  36.     printf     ("\n\t Introdueix el nom, amb un minim de 4 caracters :  ");
  37.     scanf      ("\n %[^\n]",persona[i].nom);
  38.  
  39.     printf("\n\tQuants telefons vols ? "); scanf("%d",&n);
  40.  
  41.     for (in=0;in<n && in!=10;in++){//comprovo que no pasi de 10 telefons
  42.         printf     ("\n\tIntrodueix el telefon : ");
  43.         scanf      (" %[^\n]" , persona[i].telf[in]);
  44.     }
  45. }
  46. void escribirsalida(int i){
  47.     int in=0;
  48.     printf     ("\n\t\t--Usuari/s ---  %d\n ",i+1);
  49.     printf     ("\n\t Nom %s\n", persona[i].nom);
  50.     for(in=0;in<10;in++){
  51.         printf     ("\n\t telf %s  \n",persona[i].telf[in]);
  52.     }
  53. }
  54. void menu (void){
  55.     char eleccio;
  56.     int n,i,bol=0;
  57.  
  58.     do {
  59.         system ("CLS");
  60.         printf ("\n\t Menu principal:\n\n");
  61.         printf ("\t 1.- CREAR un nou contacte\n");
  62.         printf ("\t 2.- cercar un contacte\n");
  63.         printf ("\t 3.- ESBORRAR un contacte\n");
  64.         printf ("\t 4.- Introdueix un telefon a la entrada \n");
  65.         printf ("\t 5.- FINAL DEL PROGRAMA\n");
  66.         printf ("\t Eleccio: ");
  67.         eleccio = getche ();
  68.         printf ("\n");
  69.  
  70.         if (eleccio == '1'){
  71.            printf ("\n Quantes persones vols ? "); scanf("%d",&n);
  72.            //agafo la funcio leerentrada
  73.             for(i=0;i<n;i++){
  74.                 leerentrada(i);
  75.             }
  76.             printf("\n\t ----> Creacio de contactes amb exit \n\n");
  77.             system ("PAUSE");
  78.         }
  79.         else if (eleccio == '2'){
  80.             /*for(i=0;i<n;i++){
  81.                 escribirsalida(i); //mostra tots els registres
  82.             }*/
  83.             buscar_persona(i); //li paso el maxim de la I ja sigui 2 , 6 ,9 aixi despres la reoorro
  84.  
  85.         }else  if(eleccio=='3'){
  86.  
  87.             borrar_persona(i);
  88.         }
  89.         else if(eleccio=='4'){
  90.  
  91.  
  92.             char nom_per[MAX+1];
  93.             i=0;
  94.             printf ("\n Com es diu aquesta persona Digues amb un minim de 4 caracters : A-Z  : "); scanf("%s", nom_per);
  95.  
  96.             while (i<n){
  97.                 if(persona[i].nom[0]==nom_per[0] && persona[i].nom[1]==nom_per[1] && persona[i].nom[2]==nom_per[2] && persona[i].nom[3]==nom_per[3]){
  98.                     escribirsalida(i);
  99.                     escriure_entrada(i);
  100.                     break;
  101.                 }
  102.                 i++;
  103.             }
  104.             if (i>=n){ // miro que si i es mes gran que x vol dir que no a arribat a x i salta
  105.                 printf("\n\t No existeix intenta-ho de nou  \n\n");
  106.             }
  107.        
  108.         buscar_persona(i);
  109.         escriure_entrada(i);
  110.  
  111.         }
  112.     } while (eleccio >='1' && eleccio <= '5');
  113. }
  114.  
  115. void buscar_persona( int x){
  116.         char nom_per[MAX+1];
  117.         int i=0;
  118.             printf ("\n Com es diu aquesta persona Digues un minim de 4 caracters :  A-Z  : "); scanf("%s", nom_per);
  119.  
  120.             while (i<x){         //! Suposem que un mínim de 3 lletres entrem exemple "xavi"
  121.                 if( persona[i].nom[0]==nom_per[0] && persona[i].nom[1]==nom_per[1] && persona[i].nom[2]==nom_per[2] && persona[i].nom[3]==nom_per[3]){//necessitaria un gets(nom_per) i strlen(nom_per) amb un for
  122.                     escribirsalida(i);
  123.                     break;
  124.                 }
  125.                 i++;
  126.             }
  127.             if (i>=x){ // miro que si i es mes gran que x vol dir que no a arribat a x i salta
  128.                 printf("\n\t No existeix intenta-ho de nou  \n\n");
  129.             }
  130.             system ("PAUSE");
  131. }
  132.  
  133. void borrar_persona (int x){
  134.     char nom_per[MAX+1];
  135.     int i=0;
  136.     printf("Quina persona vols borrar ? escriu un minim de 4 caracters :  A-Z  "); scanf("%s",nom_per);
  137.  
  138.     while (i<x){
  139.         if(persona[i].nom[0]==nom_per[0] && persona[i].nom[1]==nom_per[1] && persona[i].nom[2]==nom_per[2] && persona[i].nom[3]==nom_per[3]){
  140.             printf  ("\n\t Nom %s\n", persona[i].nom);
  141.             printf  ("\n\t El seu telf %s \n ",persona[i].telf);
  142.             printf  ("\n\t Ha sigut borrat amb Exit \n\n\n");
  143.             strcpy  (persona[i].nom," ");
  144.             //strcpy  (persona[i].telf," ");
  145.  
  146.             break;
  147.         }
  148.         i++;
  149.     }
  150.     if (i>=x){
  151.         printf("\n\t No existeix intenta-ho de nou \n\n");
  152.     }
  153.     system ("PAUSE");
  154. }
  155.  
  156. void escriure_entrada(int v){
  157.     int i=0,in=0;
  158.     char n;
  159.     //char f[MAX];
  160.     while (i<10 && n!='n'){//tinc que agafar la I
  161.  
  162.             //printf("\n\tIntrodueix un nou telf : _ " ); scanf(" %[^\n]",persona[x].telf[i]);  fflush( stdin ) ; //neteja la entrada/buffer
  163.             printf("\n %d ",v);
  164.  
  165.  
  166.  
  167.         printf("\n\tVols seguir introduint ? : S o N : _ "); n = getche ();
  168.         i++;
  169.     }
  170. }
  #8 (permalink)  
Antiguo 03/05/2012, 12:42
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Acciones recojiendo siempre la misma letra ?

Fijate que en la opcion 4, pones i=0 y i en esa funcion es tu marcador de posicion maxima. Asi que basicamente estas diciendo que no hay nada....

Deberias usar otra variable que no sea esa. Ademas usas n y nunca la asignaste.

Código C:
Ver original
  1. char nom_per[MAX+1];
  2.             z=0;
  3.             printf ("\n Com es diu aquesta persona Digues amb un minim de 4 caracters : A-Z  : "); scanf("%s", nom_per);
  4.  
  5.             while (z<i){
  6.                 if(persona[z].nom[0]==nom_per[0] && persona[z].nom[1]==nom_per[1] && persona[z].nom[2]==nom_per[2] && persona[z].nom[3]==nom_per[3]){
  7.                     escribirsalida(z);
  8.                     escriure_entrada(z);
  9.                     break;
  10.                 }
  11.                 z++;
  12.             }
  13.             if (z>=i){ // miro que si i es mes gran que x vol dir que no a arribat a x i salta
  14.                 printf("\n\t No existeix intenta-ho de nou  \n\n");
  15.             }

Veo que te confundes con las variables. Yo intentaria usar nombres mas descriptivos. Por ejemplo en vez de esa i, llamarla max o algo asi.
Ademas dos variables con igual nombre en diferente funcion no son la misma cosa.

Saludos
  #9 (permalink)  
Antiguo 03/05/2012, 13:03
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Acciones recojiendo siempre la misma letra ?

Cita:
Iniciado por sam90 Ver Mensaje
Fijate que en la opcion 4, pones i=0 y i en esa funcion es tu marcador de posicion maxima. Asi que basicamente estas diciendo que no hay nada....

Deberias usar otra variable que no sea esa. Ademas usas n y nunca la asignaste.

Código C:
Ver original
  1. char nom_per[MAX+1];
  2.             z=0;
  3.             printf ("\n Com es diu aquesta persona Digues amb un minim de 4 caracters : A-Z  : "); scanf("%s", nom_per);
  4.  
  5.             while (z<i){
  6.                 if(persona[z].nom[0]==nom_per[0] && persona[z].nom[1]==nom_per[1] && persona[z].nom[2]==nom_per[2] && persona[z].nom[3]==nom_per[3]){
  7.                     escribirsalida(z);
  8.                     escriure_entrada(z);
  9.                     break;
  10.                 }
  11.                 z++;
  12.             }
  13.             if (z>=i){ // miro que si i es mes gran que x vol dir que no a arribat a x i salta
  14.                 printf("\n\t No existeix intenta-ho de nou  \n\n");
  15.             }

Veo que te confundes con las variables. Yo intentaria usar nombres mas descriptivos. Por ejemplo en vez de esa i, llamarla max o algo asi.
Ademas dos variables con igual nombre en diferente funcion no son la misma cosa.

Saludos
Lo sé , son locales , es verdad la i=0 es el contador máximo que pongo , si que asigno ( n ) le digo al principio , cuantos pongo y luego en el for recorre los que he puesto .

"i" es = que "n" , porque "i" llega al final de "n"

Ahora estoy canviando el código, haber si funciona .

Luego comento

Última edición por drakgoku1; 03/05/2012 a las 13:09
  #10 (permalink)  
Antiguo 03/05/2012, 13:19
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Acciones recojiendo siempre la misma letra ?

Solo me faltará una cosa como consigo si ya tengo 3 telefonos introducidos ?

Que empieze a contar a partir de 3 en el " void escriure entrada " como recupero ?

Y muchas Gracias por todo !!! :)

He pensado usarla en una var Global :) xDDD

No se me ocurre nada como sacar un número de una acción sin un "return"//pero las acciones no tienen "return" :S

Última edición por drakgoku1; 03/05/2012 a las 13:24
  #11 (permalink)  
Antiguo 03/05/2012, 13:49
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Acciones recojiendo siempre la misma letra ?

solucionado :D

Última edición por drakgoku1; 03/05/2012 a las 22:52

Etiquetas: acciones, funcion, int, letra, siempre
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:00.