Newsgroup: it.comp.lang.c
Titolo: Funzione "strcmp": confronto!

Sto cercando di comprendere il funzionamento della "strcmp", confrontando 
due array di caratteri.
In sintesi, leggo da file una sequenza di stringhe divise su due colonne 
separate da spazio,
copio le colonne nei vettori "str2" e "str3" ed eseguo il confronto con tra 
la prima colonna "str2" ed
il valore ricevuto in input da tastiera memorizzato nel vettore "code".
Non riesco a capire perch� la funzione NON esegue il confronto tra stringhe.
Questo un frammento del file:
1  bmw
2  audi
5  lancia
12 fiat
15 nissan
Questo il codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char file[100];
int i,k;
char code[100], str2[100], str3[100];
if ((fp = fopen("codici.txt","r"))== NULL)
{
      printf("File not found");
      EXIT_FAILURE;
}
k=0;
while ((fgets(file, 100,fp))!= NULL)
{
       sscanf(file,"%s%s",&str2, &str3);
       k++;
}
      printf("\nInput code?\n");
      scanf("%s", code);
i=0;
while (i<k)
{
   if (strcmp(code, str2)== 0)
      printf("\n\nCode found!\n\n !");
      else i++;
}
   fclose(fp);
   return EXIT_SUCCESS;
} 

 }
In generale, sistemando il codice come sopra, dovebbe andare.
IMO, forse ti converrebbe prima chiedere all'utente code, e poi
confrontare durante la lettura, invece che memorizzarti tutto il file.
Ciao!

 }
Vorrei aggiungere ancora un commento:
hai messo "i++" sotto "else" quindi se la condizione
di confronto viene soddisfatta, la "i" non verrà
incrementata e quindi la condizione d'uscita della
"while" non verrà mai soddisfatta. Di conseguenza
il tuo programma non avrà mai termine.
Un saluto.

il tuo programma non avrà mai termine.
Ho rivisto e corretto il codice con le indicazioni fornite.
Ma c'è ancora qualcosa che non torna!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char file[100];
int i,k;
char code[100], str2[100][100], str3[100][100];
if ((fp = fopen("codici.dat","r"))== NULL)
{
      printf("File not found");
      EXIT_FAILURE;
}
k=0;
while ((fgets(file, sizeof(file),fp))!= NULL)
{
       sscanf(file,"%s%s",&str2[k], &str3[k]);   //qui sembra leggere solo 
la prima riga fino alla fine del vettore
       k++;
}
       printf("\nInput code?\n");
       scanf("%s", code);
for (i=0; i < k; i++)
{
      if (strcmp(code, str2)== 0)    //qui non ho capito cosa fare !!!
      printf("\n\nCode found!\n\n !");
}
   fclose(fp);
   return EXIT_SUCCESS;
}
Ciao e grazie. 


Evidentemente non ti è chiarissimo l'utilizzo di stringhe, array e
puntatori:
char a; /* carattere */
char b[100]; /* array di 100 caratteri (aka stringa) */
char c[100][100]; /* array di 100 array di 100 caratteri (aka array di
100 stringhe) */
char *d; /* puntatore a carattere */
b[0] /* il primo carattere della stringa (come anche *b) */
c[0] /* prima stringa dell'array */
c[0][0] /* primo carattere della prima stringa dell'array */
Putroppo la chiarezza non è il mio forte, e senza sapere cosa non ti è
chiaro una spiegazione migliore è difficile :-)
Ciao!

Visto che l'ho provato tanto vale...
Cos� dovrebbe funzionare:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  FILE *fp;
  char file[100];
  int i,k;
  char code[100], str2[100][100], str3[100][100];
  if ((fp = fopen("codici.dat","r"))== NULL)
  {
   printf("File not found");
   return EXIT_FAILURE;
  }
  k=0;
  while ((fgets(file, sizeof(file),fp))!= NULL)
  {
   sscanf(file,"%s%s",str2[k], str3[k]);
   k++;
  }
  printf("\nInput code? ");
  scanf("%s", code);
  for (i=0; i < k; i++)
  {
   if (strcmp(code, str2[i])== 0)
   {
    printf("\n\nCode \"%s --> %s\" found!\n\n", str2[i], str3[i]);
    break;
   }
  }
  if(i == k)
   printf("\n\nCode \"%s\" NOT found!\n\n", code);
  fclose(fp);
  return EXIT_SUCCESS;
}

Cosě dovrebbe funzionare:
.................
Cosě funziona correttamente.
Grazie
Ciao