Newsgroup: it.comp.lang.c
Titolo: confrontare i valori di una struttura

ciao Cybertoldo
come va' spero bene.
Dal programma che hai fatto deduduco che che tu il confronto tra gli 
indirizzi ip lo faccia in questi due punti.
int local_address(paddress_t pAddr1, paddress_t pAddr2)
{
     int bRes = 0;
     if(pAddr1 && pAddr2)
         bRes = (pAddr1->xx == pAddr2->xx) && (pAddr1->yy == pAddr2->yy);
     return bRes;
}
int print_local_addresses(paddress_t *apAddresses)
{    paddress_t pAddr1, pAddr2;
     int n, i, nFound = 0;
     puts("--- Matches ---");
 > non ho capito la puts
     for(n = 0; (pAddr1 = apAddresses[n]); n++)
     {    for(i = n+1; (pAddr2 = apAddresses[i]); i++)
             if(local_address(pAddr1, pAddr2))
             {    printf("- Machines '%s' and '%s' are on the same local 
network.\n",
                     pAddr1->nick_name,
                     pAddr2->nick_name
                 );
                 nFound++;
             }
     }
     if(nFound <= 0)
         printf("(no machines found on the same local network)\n");
     puts("");
     return nFound;
}
qndi la funzione print_local_addresses richiama la funzione 
local_address che effettua il confronto.
Ora io mi chiedo se io aggiungo queste due funzioni nel mio vecchio 
programma dovrebbe andare.
Ed invece no.
un grazie anticipato
#include<stdio.h>
#include<stdlib.h>
#define NICK_LEN 10     /* Memoria allocata dall'unita' nick_name */
#define MAX_ADDRESS 100 /* Numero massimo di indirizzi ip */
typedef struct{
         int xx,
             yy,
             zz,
             mm;
         char nick_name[NICK_LEN];
         }address_t;
void carica_ip(int dimensione);
void visualizza_file_ip();
void visualizza_ip(const address_t *address_ip, int dimensione);
int local_address(address_t *pAddr1, address_t *pAddr2);
int print_local_addresses(address_t *address_ip);
int main(){
     address_t address_ip[MAX_ADDRESS];
     int dimensione;
     int risposta;
     /* Inizio menu */
     do{
         printf("\n");
         printf("1. Inserisci gli indirizzi ip\n");
         printf("2. Visualizza gli indirizzi ip\n");
         printf("3. \n");
         printf("4. Uscita\n\n");
         printf("\nEffettua la tua scelta: ");
         scanf("%d", &risposta);
         switch(risposta){
              case 1:
                   printf("Quanti indirizzi ip vuoi inserire ?");
                   scanf("%d", &dimensione);
                   carica_ip(dimensione);
                   break;
              case 2:
                   printf("***INDIRIZZI IP CARICATI***\n");
                   visualizza_file_ip();
                   break;
              case 3:
                   print_local_addresses(address_ip);
                   break;
         }//fine switch
     }//fine do
     while(risposta != 4);
     system("PAUSE");
     return 0;
}
void carica_ip(int dimensione){
      FILE *fileip;
      address_t address_ip[MAX_ADDRESS];
      int i;
      fileip = fopen("indirizzi_ip.dat", "w");
      if(fileip == NULL){
          printf("Errore nell'apertura del file in scrittura");
      }
      else
          for(i = 0; i < dimensione; i++){
              fflush(stdin);
              printf("xx: ");
              scanf("%d", &address_ip[i].xx);
              fflush(stdin);
              printf("yy: ");
              scanf("%d", &address_ip[i].yy);
              fflush(stdin);
              printf("zz: ");
              scanf("%d", &address_ip[i].zz);
              fflush(stdin);
              printf("mm: ");
              scanf("%d", &address_ip[i].mm);
              fflush(stdin);
              printf("Nome Utente: ");
              gets(address_ip[i].nick_name);
              fflush(stdin);
              fprintf(fileip, "%d %d %d %d %s\n", address_ip[i].xx,
                                                  address_ip[i].yy,
                                                  address_ip[i].zz,
                                                  address_ip[i].mm,
 
address_ip[i].nick_name);
          }
          fclose(fileip);
}
void visualizza_file_ip(){
      FILE *fileip;
      address_t tmp;
      fileip = fopen("indirizzi_ip.dat", "r");
      if(fileip == NULL){
          printf("Errore nell'apertura del file in lettura.");
      }
      else{
           fscanf(fileip,"%d %d %d %d %s",&tmp.xx,
                                          &tmp.yy,
                                          &tmp.zz,
                                          &
tmp.mm
,
                                          &tmp.nick_name);
          while(!feof(fileip)){
              printf("-----------------\n");
              printf("%d.%d.%d.%d,%s\n", tmp.xx,
                                         tmp.yy,
                                         tmp.zz,
 
tmp.mm
,
                                         tmp.nick_name);
              printf("-----------------\n");
              fscanf(fileip,"%d %d %d %d %s",&tmp.xx,
                                             &tmp.yy,
                                             &tmp.zz,
                                             &
tmp.mm
,
                                             &tmp.nick_name);
          }
      }
      fclose(fileip);
      return;
}
int local_address(address_t *pAddr1, address_t *pAddr2)
{
     int bRes = 0;
     if(pAddr1 && pAddr2)
         bRes = (pAddr1->xx == pAddr2->xx) && (pAddr1->yy == pAddr2->yy);
     return bRes;
}
int print_local_addresses(address_t *address_ip)
{
     address_t pAddr1, pAddr2;
     int n, i, nFound = 0;
     puts("--- Matches ---");
     for(n = 0; (pAddr1 = address_ip[n]); n++)
     {    for(i = n+1; (pAddr2 = address_ip[i]); i++)
             if(local_address(pAddr1, pAddr2))
             {    printf("- Machines '%s' and '%s' are on the same local 
network.\n",
                     pAddr1->nick_name,
                     pAddr2->nick_name
                 );
                 nFound++;
             }
     }
     if(nFound <= 0)
         printf("(no machines found on the same local network)\n");
     puts("");
     return nFound;
}

> non ho capito la puts
ma non hai un reference per le funzioni del C?
PS: sul tuo listato continuano ad esserci errori, tra cui quelli 
classici "da FAQ". Alcuni sono stati "anche oggi" oggetto di post.
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com


...ora la vuoi far funzionare con un "array di strutture" address_t.
