Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42

    [C++] Ricerca di un valore

    Ciao a tutti. Ho scritto un programma che permette all'utente, una volta riempito un vettore, di cercare una parola a sua scelta. Il problema e' che, anche se inserisco un valore presente nel vettore, l'output e' sempre "negativo". Sapete dirmi perché?

    codice:
    #include<iostream>
    #include<stdlib.h>
    #include<stdio.h>
    
    
    using namespace std;
    
    
    main()
    {
          int x,i,trovato=0;
          char val[1][20];
          
          cout<<"Quanti valori vuoi inserire? (tra 1 e 100) "; //dichiarazione della lunghezza del vettore
          cin>>i;
          
          char v[i][20];
          
          x=i;
          
          if(0>i || i>100) cout<<"Valore inserito non valido."<<endl; //se il numero non e' compreso fra 1 e 100 allora manda errore, altrimenti prosegue
          else
          {
              i=0;
              
              while(i<x) //riempimento vettore
              {
                        cout<<"Inserisci un valore: ";
                        cin>>v[i];
                        i++;
              }
              
              cout<<"Quale valore vuoi trovare? "; //richiesta della parola da trovare
              cin>>val[0];
              
              i=0;
              
              while(i<x) //ciclo di controllo del vettore
              {
                        if(v[i]==val[0]) //se la parola inserita corrisponde al vettore di cella i allora trovato e' vero
                        {
                                      trovato=1;
                                      x=i;
                        }
                        i++;
              }
              
              if(trovato==1) cout<<"Valore trovato nella posizione "<<x<<"."<<endl; //output del risultato
              else cout<<"Valore non trovato."<<endl;   
              
          }
          
          system("pause");
    }
    EDIT: un altro problema che ho riscontrato e' che quando provo a inserire numeri negativi il programma smette di funzionare invece di dare errore, perché?
    Ultima modifica di kaine25; 07-12-2014 a 15:03

  2. #2
    L'uso di valiabili anonime, specie per i neofiti, possono generare confusione e sovrascritture indesiderate
    Le sctringhe in stile C vanno confrontate con l'apposita funzione di libreria strcmp(), non puoi usare il semplice operatore ==

    codice:
    #include<iostream>
    
    using namespace std;
    
    void clear_stdin() 
    {
        int ch;
        while((ch=getchar())!='\n' && ch!=EOF);
    }
    
    int main()
    {
        int i, max;
        char valoreDaCercare[50];
        char ArrayDiStringhe[100][50];
        cout<<"Quanti valori vuoi inserire? (tra 1 e 100) "; //dichiarazione della lunghezza del vettore
        cin>>max;
        if( max<1 || max>100 )
            cout<<"Valore inserito non valido."<<endl; //se il numero non e' compreso fra 1 e 100 allora manda errore, altrimenti prosegue
        else
        {
            for(i=0; i<max; i++) //riempimento vettore
            {
                cout<<"Inserisci un valore ["<<i<<"/"<<max<<"]: ";
                cin>>ArrayDiStringhe[i];
            }
            cout<<"Quale valore vuoi trovare? "; //richiesta della parola da trovare
            cin>>valoreDaCercare;
            
            for( i=0; i<max; i++) //ciclo di controllo del vettore
                if( !strcmp( ArrayDiStringhe[i], valoreDaCercare) ) //se la parola inserita corrisponde al vettore di cella i allora trovato e' vero
                    break;
            if( i<max ) 
                cout<<"Valore trovato nella posizione "<<i<<"."<<endl; //output del risultato
            else 
                cout<<"Valore non trovato."<<endl;
        }
        clear_stdin();
        cin.get();
        return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42
    Potresti spiegarmi il funzionamento del programma che hai scritto? Inoltre, non capisco come tu abbia fatto a risolvere il problema dei negativi e questa parte del programma


    codice:
    for( i=0; i<max; i++) //ciclo di controllo del vettore
                if( !strcmp( ArrayDiStringhe[i], valoreDaCercare) ) //se la parola inserita corrisponde al vettore di cella i allora trovato e' vero
                    break;
            if( i<max ) 
                cout<<"Valore trovato nella posizione "<<i<<"."<<endl; //output del risultato
            else 
                cout<<"Valore non trovato."<<endl;

    Grazie in anticipo.
    Ultima modifica di kaine25; 07-12-2014 a 17:51

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Intanto questa riga

    char v[i][20];

    se i è negativa, ti dà un errore ed è stata comunque eliminata perché non ha senso.
    E' stato dimensionato l'array con 100 stringhe.

    Per la parte di codice che non capisci, il ciclo viene interrotto se la parola viene trovata. Solo il quel caso, all'uscita del ciclo i sarà minore di max.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42
    Grazie della spiegazione! ^^

    Stavo cercando di modificare il mio vecchio programma con i tuoi consigli ma adesso mi da sempre "Valore trovato nella posizione 0.", potresti dirmi cosa sto sbagliando? Scusami ma sono alle prime armi

    codice:
    #include<iostream>
    #include<stdlib.h>
    #include<string.h>
    
    
    using namespace std;
    
    
    main()
    {
          int x,i;
          char v[100][20],val[1][20];
          
          cout<<"Quanti valori vuoi inserire? (tra 1 e 100) ";
          cin>>i;
          
          x=i;
          
          if(i<1 || i>100) cout<<"Valore inserito non valido."<<endl;
          else
          {
              i=0;
              
              while(i<x)
              {
                        cout<<"Inserisci un valore: ";
                        cin>>v[i];
                        i++;
              }
              
              cout<<"Quale valore vuoi trovare? ";
              cin>>val[0];
              
              i=0;
              
              while(i<x)
              {
                        if(strcmp(v[i],val[0])) break;
                        i++;
              }
              if(i<x) cout<<"Valore trovato nella posizione "<<i<<"."<<endl;
              else cout<<"Valore non trovato."<<endl; 
          }
          
          system("pause");
    }

  6. #6
    Come ti è stato già dimostrato e spiegato questa dichiarazione non ha senso

    codice:
    char val[1][20]
    Scrivi
    codice:
    char val[20];
    e studia come funziona la strcmp()
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    42
    Oh, pensavo restituisse 1 se le stringhe erano uguali... Grazie mille!!! Mi sei stato di grande aiuto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.