Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/07/2010, 10:37
minette1988
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
pasar una estructura por referencia

El siguiente programa pasa una estructura por referencia; umenta y decrementa el saldo de los clientes y los muestra por pantalla. Al compilarlo funciona, pero me da fallo de segmentación.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct cuenta{
  5.          char nom[100];
  6.          float saldo;
  7. };
  8.  
  9. int main(){
  10.  
  11. struct cuenta cliente[3];
  12. struct cuenta *punt;
  13.  
  14. int i;
  15. char c;
  16.  
  17. void aumento();
  18. void decremento();
  19.  
  20. for(i=0; i<=2; i++){
  21.         printf("Nombre: ");
  22.         scanf("%99s", cliente[i].nom);
  23.         printf("Saldo: ");
  24.         scanf("%f", &cliente[i].saldo);
  25. }
  26. do{
  27.    printf("A--> Aumentar el saldo.\n");
  28.    printf("D--> Decrementar el saldo.\n");
  29.    printf("S--> Salir.\n");
  30.    scanf("%1s", &c);
  31.    if((c=='A') || (c=='a')){
  32.          printf("Numero del cliente: ");
  33.          scanf("%d", &i);
  34.          punt = &cliente[i];
  35.          aumento(&cliente[i]);
  36.          
  37.    }
  38.    if((c=='D') || (c=='d')){
  39.          printf("Numero del cliente: ");
  40.          scanf("%d", &i);
  41.          punt = &cliente[i];
  42.          decremento(&cliente[i]);
  43.    }
  44. }
  45. while((c != 's') && (c != 'S'));
  46.  
  47. for(i=0; i<=2; i++)
  48.          printf("\nEl saldo del cliente %d: %.2f\n",i, cliente[i].saldo);
  49. }
  50. void aumento(struct cuenta *sal){
  51.          float inc;
  52.  
  53.          printf("Incremento del saldo: ");
  54.          scanf("%f", &inc);
  55.          sal->saldo=sal->saldo+inc;}
  56.  
  57. void decremento(struct cuenta *sal){
  58.          float dec;
  59.  
  60.          printf("Decremento del saldo: ");
  61.          scanf("%f", &dec);
  62.          sal->saldo=sal->saldo+dec;}

En las dos funciones aumento y decremento declaramos struct cuenta *sal. *sal significa que accedemos al valor del salario antes de ser aumentado o decrementado ¿no?. Esta instrucción
Código C:
Ver original
  1. sal->saldo=sal->saldo+inc;
¿qué hace y por qué está el operador flecha dos veces? El operador flecha accede al elemento de la estructura ¿no?.