Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429

    [C++]

    Perchè il confronto tra vet[i].nominativo e stre non viene eseguito correttamente???
    Sono entambi di tipo stringa, ma il confronto proprio non lo esegue, cioè anche se sono uguali non accede all'if ma va avanti come se fossero diversi....questo è il prog:

    codice:
    #include <stdio.h>
    #include <conio.h>
    #include <iostream.h>
    #include <stdlib.h>
    #include <conio.c>
    
    const int n=5;
    typedef char stringa[50];
    struct allievi{
         stringa nominativo;
         int eta;
         float peso,altezza;
    };
    allievi vet[n];
    void inserisci_allievi(void);
    void ricerca(void);
    
    int main(){
         inserisci_allievi();
         ricerca();
         getch();
         return 0;
    }
    
    void inserisci_allievi(void){
         int i;
         for(i=0;i<=n-1;i++){
                cout<<"\nInserisci il nominativo dell'alunno numero " <<(i+1) <<" : ";
                cin>>vet[i].nominativo;
                cout<<"\nInserisci l'eta' dell'alunno numero " <<(i+1) <<" : ";
                cin>>vet[i].eta;
                cout<<"\nInserisci il peso dell'alunno numero " <<(i+1) <<" : ";
                cin>>vet[i].peso;
                cout<<"\nInserisci l'altezza dell'alunno numero " <<(i+1) <<" : ";
                cin>>vet[i].altezza;
                cout<<"\n";
         }
    }
    
    void ricerca(void){
         int i, flag=0;
         stringa stre;
         cout<<"\nInserisci il nominativo da ricercare nel vettore di struct: ";
         cin>>stre;
         for(i=0;i<=n-1;i++){
               if(vet[i].nominativo==stre){
                       flag=1;
                       cout<<"\nL'alunno numero " <<(i+1) <<" presenta il nominativo " <<stre <<" ed ha " <<vet[i].eta <<" anni, pesa " <<vet[i].peso <<" chili";
                       cout<<"\ned e' alto " <<vet[i].altezza <<" centimetri.";
               }
         }
         if(flag==0)
               cout<<"\nNon e' presente nessun allievo di nome " <<stre;
    }
    Help me....anche perchè con la funzione strcmp() il confronto viene eseguito correttamente....mha...

  2. #2
    semplicemente perchè il confronto viene fatto sui puntatori (zona di memoria a cui puntano) e non sulle stringhe...

    in C/C++ l'operatore == lo puoi utilizzare solo per confrontare i singoli char (e non gli array)
    codice:
    char s1[] = "uno", s2[] = "uno"; // saranno sempre differenti
    
    if ( s1 == s2 ) // restituirà sempre FALSE (entrando nell'ELSE)
    ...
    else
    ...
    p.s. la prossima volta cerca di utilizzare un titolo più specifico...
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    usa stcmp

    int strcmp ( const char * string1, const char * string2 );

    Compare two strings.
    Compares string1 to string2 character by character.
    This function starts comparing the first character of each string. If they are equal to each other continues with the following pair until the characters differ or until end of string is reached.

    Parameters.

    string1
    Null-terminated string to compare.
    string2
    Null-terminated string to compare.

    Return Value.
    Returns a value indicating the lexicographical relation between the strings:

    return value description
    <0 string1 is less than string2
    0 string1 is the same as string2
    >0 string1 is greater than string2


    Portability.
    Defined in ANSI-C.

    Example.

    /* strcmp example */
    #include <stdio.h>
    #include <string.h>

    int main ()
    {
    char szKey[] = "apple";
    char szInput[80];
    do {
    printf ("Which is my favourite fruit? ");
    gets (szInput);
    } while (strcmp (szKey,szInput) != 0);
    printf ("Correct answer!\n");
    return 0;
    }

    Output:
    Which is my favourite fruit? orange
    Which is my favourite fruit? apple
    Correct answer!

  4. #4
    Originariamente inviato da bako
    usa stRcmp

    int strcmp ( const char * string1, const char * string2 );
    Originariamente inviato da Iena87
    ....anche perchè con la funzione strcmp() il confronto viene eseguito correttamente...
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    ah ok grazie mille

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Scusa, ma dov'è l'utilità di lavorare in C++ se nn sfrutti nulla del linguaggio?

    Potresti usare la classe string per la quale è definito l'operatore == ed una funzione di ricerca e tante altre cosine.
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  7. #7
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Originariamente inviato da infinitejustice
    Scusa, ma dov'è l'utilità di lavorare in C++ se nn sfrutti nulla del linguaggio?

    Potresti usare la classe string per la quale è definito l'operatore == ed una funzione di ricerca e tante altre cosine.
    E' che io uso ancora un linguaggio scolastico...nn appena ho tempo mi dedico allo studio del c++ da autodidatta (le basi del linguaggio le ho, bene o male) e li cerco di imparare quanto è + possibile

  8. #8
    Utente di HTML.it L'avatar di Iena87
    Registrato dal
    Dec 2003
    Messaggi
    429
    Per non aprire un altro thread e restare in tema di confronto di stringhe, ho un vettore di struct dove uno dei campi è "Cognome"...adesso dopo aver fatto delle cose io voglio ordinare le struct del vettore in base al cognome....riesco a farlo ma solo analizzando la prima lettera di questi, quindi se dovessi oridnare i cognomi:

    Rossi
    Rosati

    Me li visualizzerebbe così nel caso in cui nella strcut ci fosse prima Rossi di Rosati....come fare per confrontarle in maniera corretta interamrente???

  9. #9
    Un bel ciclo (while, for, scegli tu) e ti passa la paura...
    Se le prime lettere sono uguali, passi alle seconde; se sono uguali anche quelle passi alle terze, e cosi' via. Se una delle due stringhe finisce prima di trovare una lettera diversa, e' quella minore.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Perchè non utilizzi la funzione strcmp() sui campi Cognome delle strutture?
    codice:
    if (strcmp(struttura1.cognome, struttura2.cognome) > 0) {
       // Vanno invertite
       ...
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.