Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Confronto array di char
Forum - C/C++ - Confronto array di char

Avatar
deserto (Normal User)
Newbie


Messaggi: 10
Iscritto: 22/08/2006

Segnala al moderatore
Postato alle 19:05
Mercoledì, 06/12/2006
Sapete dirmi dove ho sbagliato???
Quando faccio la ricerca nn va:
Mi dice sempre che il libro nn è stato trovato.

Codice sorgente - presumibilmente C++

  1. #include <iostream.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. struct biblio
  6. {char code[3];};
  7.  
  8. biblio teca[10];
  9.  
  10.  
  11. void main()
  12. {int i,n;
  13.  char codric[3];
  14.  char trovato;
  15.  
  16.  // ********* Caricamento *********
  17.  clrscr();
  18.  cout <<"Numero libri da registrare: ";
  19.  cin >> n;
  20.  for (i=0; i<n; i++)
  21.                 {cout <<"\n\n";
  22.                  cout <<"Codice libro: ";
  23.                  cin >> (teca[i ].code);
  24.                 }
  25.  
  26. //**** ricerca ****
  27. cout << "Inserisci il codice del libro da ricercare: ";
  28.  cin >> codric;
  29.  trovato= 'f';
  30.  i=0;
  31.  do
  32.  {if (codric == teca[i ].code)
  33.      {cout << "trovato";
  34.       trovato = 't';}
  35.   i++;} while (i<n && trovato=='f');
  36.  if (trovato == 'f')
  37.     {cout << "Il libro non e' stato trovato";}
  38.  
  39.  getch();
  40. }



Ultima modifica effettuata da pierotofy il 07/12/2006 alle 5:14
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6109
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 5:12
Giovedì, 07/12/2006
Ecco che succede ad insegnare il Pascal a scuola... :asd:

Scherzo.

A parte il fatto che mi sembra bizzarro utilizzare un array di char per contenere un codice ID (suppongo numerico, se così non fosse allora usare i char è ok), oltre all'usare una variabile char per un valore booleano (vero o falso). Per indicare vero o falso in c++ la prossima volta ti consiglio di usare:

Codice sorgente - presumibilmente C/C++

  1. bool trovato = true;
  2. if (trovato){
  3.  // ...
  4. }



Comunque il problema è qui:

Codice sorgente - presumibilmente C/C++

  1. // ...
  2.  i=0;
  3. do
  4. {[b]if (codric == teca[i ].code)[/b]
  5. {cout << "trovato";
  6. // ...



Facendo il confronto tra codric e teca[i ].code, tu non confronti tutti e 3 elementi dell'array, bensì solamente il primo elemento (questo perchè entrambi sono puntatori al primo elemento dell'array). Per risolvere puoi usare la funzione C ANSI:

Codice sorgente - presumibilmente C/C++

  1. if (strcmp(codric,teca[i ].code) == 0)



Definita in <string.h>

Oppure ancora più elegantemente modificare il programma definendo codric e teca[i ].code variabili di tipo string, sfruttando la potenza della classe string del c++. In questo modo l'istruzione come l'hai scritta tu andrebbe bene, perchè la classe string del c++ ha l'operatore di uguaglianza overloadato per gestire i confronti.

Ultima modifica effettuata da pierotofy il 07/12/2006 alle 5:13


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
deserto (Normal User)
Newbie


Messaggi: 10
Iscritto: 22/08/2006

Segnala al moderatore
Postato alle 16:39
Giovedì, 07/12/2006
grazie mille..:k:..colpa del Pascal e del prof che nn spiega.:D

PM Quote