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

Ayuda en programa con struct

Estas en el tema de Ayuda en programa con struct en el foro de C/C++ en Foros del Web. Hola a todos, resolvi un pequeño programa que me dice que para cierto numero de usarios(usuarios[]) que realiza cada uno un cierto numero de llamadas, ...
  #1 (permalink)  
Antiguo 19/10/2009, 13:47
 
Fecha de Ingreso: octubre-2009
Mensajes: 1
Antigüedad: 14 años, 6 meses
Puntos: 0
Ayuda en programa con struct

Hola a todos, resolvi un pequeño programa que me dice que para cierto numero de usarios(usuarios[]) que realiza cada uno un cierto numero de llamadas, debo crear un funcion consumo que tenga como parametros usuarios,cantidad de usuarios,numTlf (numero de telef a la persona que el usuario llamo mas tiempo) y el mes en que fue hecha esta llamada. Lo que me sucede es que puedo resolver esto sin hacer la funcion llamada consumo, pero cuando hago esta funcion con la misma logica me sale como error: request for member 'numTlf' in 'llam', which is of non-class type 'llamada[50]'...Supongo que es una falla en los parametros o en alguna declaracion, espero puedan ayudarme por que no se como corregirlo, gracias de antemano por las respuestas.
El codigo es:
Código:
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include "header.h"
using namespace std;

const int N=1000;


struct LineaControl{
       char numero[14];
       char usuario[40];
       int nllam;              //numero de llamadas
       llamada llam[100];       //array de llamadas
       }usuarios[N];
       

void IngresaDatos(LineaControl usuarios[],int &n);       //ojo que tenemos que hacer como puntero para que la variable n pueda avanzar
void ImprimeDatos(LineaControl usuarios[],int &n);   //notese que cuando solo se declara int n te pedira siempre Ingrese el numero de telefono del 1 cliente
                                                         //siempre sera 1 cliente, 1 cliente
void consumo(LineaControl usuarios[],int &n,char numTlf,int mes);

void IngresaDatos(LineaControl usuarios[],int &n)
{     
      fflush(stdin);
      cout<<"\t\t\tIngrese el numero de telefono del "<<n<<" cliente: ";    gets(usuarios[n].numero);fflush(stdin);cout<<endl<<endl;
      cout<<"Ingrese el nombre del cliente: ";                gets(usuarios[n].usuario);fflush(stdin);
      cout<<"Ingrese cantidad de llamadas que realizo el cliente: ";    cin>>usuarios[n].nllam;fflush(stdin);
      cout<<endl;
      
      cout<<"Ingreso de datos de llamadas que realizo el cliente "<<usuarios[n].usuario<<endl;
      for(int i=1;i<=usuarios[n].nllam;i++)
      {   cout<<"Ingrese el "<<i<<" numero: ";       gets(usuarios[n].llam[i].numTlf); fflush(stdin);
          cout<<"Ingrese la duracion de la llamada: ";    cin>>usuarios[n].llam[i].tiempo; fflush(stdin);
          cout<<endl<<"Ingrese la fecha que se realizo la llamada dd/mm/aaaa: ";   cin>>usuarios[n].llam[i].f.dia>>usuarios[n].llam[i].f.mes>>usuarios[n].llam[i].f.anio;fflush(stdin);
          cout<<endl;
      }

      n++;// el n sigue avanzando, por ejemplo si ponemos dos personas, al final n valdra 3 por eso en la siguiente funcion
      //ponemos com parametro en el for que i<n, sino imprimiria un tercer usuario y todo seria vacio
}   


void ImprimeDatos(LineaControl usuarios[],int &n)
{     
      cout<<"Los datos ingresados fueron: "<<endl<<endl;
      for(int i=1;i<n;i++)  //ponemos que i<n por que el n ya avanzo en uno mas en la funcion anterior 
      
      
      {
      cout<<"..................................................."<<endl;
      cout<<"numero del cliente: "<<usuarios[i].numero;               cout<<endl<<endl;
      cout<<"nombre del cliente: "<<usuarios[i].usuario;cout<<endl;
      cout<<"datos de llamadas que realizo el cliente "<<usuarios[i].usuario<<endl;
        for(int j=1;j<=usuarios[i].nllam;j++)
        {   cout<<usuarios[i].llam[j].numTlf<<endl;
            cout<<"duracion de la llamada: "<<usuarios[i].llam[j].tiempo<<endl;
            cout<<"fecha que se realizo la llamada dd/mm/aaaa: "<<usuarios[i].llam[j].f.dia<<" \ "<<usuarios[i].llam[j].f.mes<<" \ "<<usuarios[i].llam[j].f.anio;
            cout<<endl<<endl;
        }
      cout<<"..................................................."<<endl;
      }
cout<<endl<<endl;

}
void consumo(LineaControl usuarios[],int &n,char numTlf,int mes)
{
     int posic;
      for(int i=1;i<n;i++)
      {    float mayor=0;
           for(int j=1;j<=usuarios[i].nllam;j++)  //busco quien tiene el tiempo mayor
           {   if(usuarios[i].llam[j].tiempo>mayor)
               {mayor=usuarios[i].llam[j].tiempo;}
           }
           for(int j=1;j<=usuarios[i].nllam;j++)  //busco a quien le pertenece el numero mayor
           {    if(mayor==usuarios[i].llam[j].tiempo)
                {posic=j;}  //marco la posicion
           }
           cout<<"La llamada mas larga que realizo "<<usuarios[i].usuario<<" fue al numero: "<<usuarios[i].llam[posic].numTlf<<" y duro: "<<usuarios[i].llam[posic].tiempo<<" en el mes de "<<usuarios[i].llam[posic].f.mes<<endl;
      
      }


}

int main()
{    int personas,i,n=1;
     fecha f;
     //llamada llam;
     //LineaControl usuarios;
     cout<<"Ingrese la cantidad de personas a procesar: ";  cin>>personas;
     
     for(i=1;i<=personas;i++)//2557156
     {    IngresaDatos(usuarios,n);
     
     }
     ImprimeDatos(usuarios,n);
     consumo(usuarios,n,llam.numTlf,f.mes);
     
     
     system("PAUSE");
     return 0;
}

y el header es:
Código:
#ifndef LLAMADA_H
#define LLAMADA_H 
 struct fecha{int dia,mes,anio;};


struct llamada{ 
       fecha f;
       char numTlf[14];        // numero al cual se llama
       float tiempo;             // linea control
       }llam[50];

#endif
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 10:56.