06/12/06 18:05
deserto
Sapete dirmi dove ho sbagliato???
Quando faccio la ricerca nn va:
Mi dice sempre che il libro nn è stato trovato.
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
struct biblio
{char code[3];};
biblio teca[10];
void main()
{int i,n;
char codric[3];
char trovato;
// ********* Caricamento *********
clrscr();
cout <<"Numero libri da registrare: ";
cin >> n;
for (i=0; i<n; i++)
{cout <<"\n\n";
cout <<"Codice libro: ";
cin >> (teca[i ].code);
}
//**** ricerca ****
cout << "Inserisci il codice del libro da ricercare: ";
cin >> codric;
trovato= 'f';
i=0;
do
{if (codric == teca[i ].code)
{cout << "trovato";
trovato = 't';}
i++;} while (i<n && trovato=='f');
if (trovato == 'f')
{cout << "Il libro non e' stato trovato";}
getch();
}
Ultima modifica effettuata da pierotofy 07/12/06 4:14
aaa
07/12/06 4:12
pierotofy
Ecco che succede ad insegnare il Pascal a scuola...
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:
bool trovato = true;
if (trovato){
// ...
}
Comunque il problema è qui:
// ...
i=0;
do
{[b]if (codric == teca[i ].code)[/b]
{cout << "trovato";
// ...
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:
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 07/12/06 4:13