PROBLEMA Programma per cercare in un elenco

Haidakan

Nuovo Utente
125
2
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
HDD
TOSHIBA DT01ACA100
RAM
8 GB DDR3
GPU
Nvidia Geforce GT 610
Audio
Integrata
Monitor
LG L1960TQ
PSU
Da 500 W
OS
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
6,440
5,091
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.
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
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
125
2
CPU
Intel core i7 4790 - 3.60 Ghz
Scheda Madre
ASRock H81M-DGS R2.0
HDD
TOSHIBA DT01ACA100
RAM
8 GB DDR3
GPU
Nvidia Geforce GT 610
Audio
Integrata
Monitor
LG L1960TQ
PSU
Da 500 W
OS
Windows 8.1 Pro (64 bit)

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
  • Mi piace
Reazioni: Haidakan

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili