Newsgroup: it.comp.lang.c
Titolo: confronto array .. struct

Scusate, sto cercando di ultimare un esercizio, ma non riesco a venirne 
fuori  ...
Acquisisco due file rispettivamente in una struct ed in due array.
Chiedo l'inserimento ripetuto di codici (Max 10) e li confronto tutti
con i codici acquisiti nell'array.
Se corrispondono, stampo a video la somma. Dopodiché il programma riprende 
dall'inizio ...
Purtroppo, non mi è ancora chiaro come confrontare tra loro tutti
gli elementi dell'array e quelli della struct.
Ciao
Questo il file codici:
1  bmw
2  audi
5  lancia
12 fiat
15 nissan
Questo il file prezzi:
bmw  33.50
audi 42.20
lancia 25.10
fiat  18.50
nissan 11.30
===================
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define END "-1"
#define CASH "0"
typedef struct {
   char    name[21];
   double price;
   char   code2[21];
}Prezzi;
int main()
{
FILE *fp1, *fp2;
char code[100], name[100];
int i,j,k;
Prezzi prz[100];
char cons[21][30];
double sum = 0;
if ((fp1=fopen("codici.dat","r"))== NULL)
{
    printf("File not found\n\n");
    return EXIT_FAILURE;
}
if ((fp2=fopen("prezzi.dat","r"))== NULL)
{
    printf("File not found\n\n");
    return EXIT_FAILURE;
}
  i=0;
  while(fscanf(fp2,"%s%lf", prz[i].name, &prz[i].price )!= EOF){
    i++;
}
  while ((fscanf(fp1, "%s%s", code, name))!= EOF){
        for (j=0; j < i; j++){
            if (strcmp(prz[j].name, name) == 0){
                strcpy(prz[j].code2, code);
                printf("%s %s %.2lf\n",prz[j].code2,prz[j].name, 
prz[j].price );
            }
        }
}
// Qui iniziano i problemi ...
  printf("Inserire codice: 0 per terminare, -1 per uscire\n\n");
  for (k=0; k < 10; k++){
    printf("Codice?");
    scanf("%s", cons[k]);
    if (strcmp(CASH, cons[k]) == 0){
            for (j=0; j < k ; j++){
                if (strcmp(cons[j],prz[j].code2) == 0){
                }
                    sum += prz[j].price;
                }
                    printf("\n\nTotale: %.2lf\n", sum);
                    printf("\n");
                    k=0;
                    sum=0;
            }
                else if (strcmp(END, cons[k]) == 0){
                printf("\nEND PROGRAM\n\n");
                exit(3);
    }
  }
fclose(fp1);
fclose(fp2);
        return 0;
} 

 }
Spero di esserti stato utile.
Ciao!

 dall'utente potrebbe essere l'ultimo del tuo array...)
Qui non capisco come devo scorrerlo l'array (e fin dove).
Qual è il modo corretto di impostare il ciclo "for"?
Ciao

 Ciao
E' facile arrivarci con un po' di ragionamento:
cons - contiene valori fino a k, quindi devi prendere in
considerazione tutti i valori da 0 a k-1
prz - contiene valori fino a N (<- da dove la puoi prendere?) e quindi
devi prendere in considerazione tutti i valori da 0 ad N-1
quindi, se devi confrontare ogni cons con ogni prz...
:-)
Ciao!

 Ciao!
Scusa, purtroppo i miei tentativi di correzione non sono andati a buon fine 
...
La logica d'impostazione che c'č dietro mi č sufficientemente chiara,
ma codificarla č un'altra cosa ...
Se mi dai modo di interpretare delle righe di codice corrette, forse 
riuscirei meglio
ad individuare gli errori ...
Grazie
Ciao 

 Ciao
vediamo... traducendo  1 a 1 il ragionamento di cui sopra, ovvero che
dobbiamo controntare ogni cons con ogni prz, abbiamo (nome delle
variabili di invenzione):
/* 1- dobbiamo scorrere i cons da zero a k-1 */
for (a=0; a<k; ++a) {
    /* 2- dobbiamo scorrere i prz da 0 a N-1 */
    for(b=0; b<N; ++b) {
        /* confronto */
        if (!strcmp(cons[a], prz[b].code2) { [..] }
    }
}
Ciao!

 Ciao!
OK. Adesso è più chiaro.
Con i dovuti accorgimenti funziona.
Grazie [1000]
:-)

 "FtM"  ha scritto nel messaggionews:98e5fa9c-49a4-4fb0...@k7g2000yqj.googlegroups.com...

:-) Figurati!
Ciao!