PROBLEMA Programma per cercare in un elenco

Haidakan

Nuovo Utente
109
2
Hardware Utente
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
Hard Disk
TOSHIBA DT01ACA100
RAM
8 GB DDR3
Scheda Video
Nvidia Geforce GT 610
Scheda Audio
Integrata
Monitor
LG L1960TQ
Alimentatore
Da 500 W
Sistema Operativo
Windows 8.1 Pro (64 bit)
Salve, ho scritto questo programma in c++ (penso si noti che sono un po' alle prime armi) che cerca un nome in un elenco. Diciamo che funziona, ma ho notato qualche problema soprattutto se il nome trovato e' l'ultimo nell'elenco. Mi sapete dare qualche consiglio? Grazie in anticipo

C++:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct elenco {

char p[40];

};

using namespace std;

int main()
{
    elenco v[10];

    char d[40];
    int i, j, k=0;

    cout<<"Inserisci nome degli utenti\n\n";
    for(i=0; i<3; i++)
    {
        cout<<"Utente "<<i+1<<"\n";
        cin>>v[i].p;
    }

    cout<<"Inserisci nome da cercare: ";
    cin>>d;

    i=-1;

    do{
        i++;
        while((strlen(d)!=strlen(v[i].p)) && (i<3))//finché il numero di lettere non e' uguale i viene incrementato
        {
            i++;
        }

        if(i<3)
        {
            j=0;
            while((d[j]==v[i].p[j]) && ( j<strlen(v[i].p)))
            {
                j++;
            }
        }

        if(j==strlen(v[i].p))
        {
            cout<<i<<" Il nome e' stato trovato\n\n";
            cout<<d<<"\n";
            cout<<v[i].p;
            k=1;
        }

    }while(k==0 && i<3);

    if(k==0)
    {
        cout<<"\n\nIl nome non e' presente nell'elenco\n\n";
    }

    return 0;
}
 

Andretti60

Utente Èlite
3,365
2,238
Hardware Utente
Lo hai fatto molto più complicato del dovuto. Non hai bisogno di fare due test, uno sulla lunghezza del nome e uno sul confronto, ti basta fare il confronto usando uno dei metodi standard, a seconda se stai usando C o C++ (non è chiaro, nel tuo codice mischi i due linguaggi), insomma ti basta un solo ciclo.
NB quando usi costanti, come in questo caso il numero 3 per definire quanti nomi ci sono nel vettore, definisce una costante invece che direttamente il numero nel codice, in quella maniera il codice è più leggibile e facile da modificare.
 
  • Mi piace
Reactions: Haidakan e _Achille

_Achille

Utente Èlite
2,984
682
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
In C++ si dovrebbero usare le stringhe della STL, non le stringhe C-Type NUL-terminate, con relativo header <string>
 

Haidakan

Nuovo Utente
109
2
Hardware Utente
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
Hard Disk
TOSHIBA DT01ACA100
RAM
8 GB DDR3
Scheda Video
Nvidia Geforce GT 610
Scheda Audio
Integrata
Monitor
LG L1960TQ
Alimentatore
Da 500 W
Sistema Operativo
Windows 8.1 Pro (64 bit)

_Achille

Utente Èlite
2,984
682
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
  • Mi piace
Reactions: Haidakan

Entra

oppure Accedi utilizzando