Problemino programma

di il
9 risposte

Problemino programma

Ragazzi sto uscendo un po pazzo per questa cosa ma credo che sia una stupidata la soluzione(scemo io che non ci arrivo), nella parte di programma in C++ qui in basso io trasformo in hash una frase (nel codice qui senza senso), poi controllo la sua presenza in un file txt, se non ci sta viene aggiunta e di conseguenza mi viene copiata nel db usando un wrapper di sqlite.
Il fatto è che anche se esiste l hash nel txt mi procede con la copia della domanda nel db, l istruzione con la query del db mi viene comunque eseguita.

il problema sta nella zona della verifica della presenza dell hash nel txt. come posso dire a quell " if " di non procedere con la copia nel db?
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>
#include <sqlite_modern_cpp.h>
#include <unordered_set>
#include "md5.h"
using namespace sqlite;
using namespace std;

int main()
{
    fstream file("test.txt");
    string line;
    string quest1="come";
    string congiunzione="stai";
    string posi="amico";
    string puntoesc="puntodidomanda";
    unordered_set<string> res;

    while(file>>line)   //INIZIO CONTROLLO HASH IN TXT
    {
        res.insert(line);
    }

    do
    {

        string hash;
        hash = md5(quest1 + congiunzione + posi + puntoesc);
        cout << hash << endl;
        if (res.find(hash) != res.end())
            cout << " exist." << endl;


        else
          cout << "not exists, copying..." <<endl;
          std::ofstream outfile;                  //INIZIO COPIA HASH NEL TXT
          outfile.open("test.txt", std::ios_base::app);
          outfile << hash << '\n';                  //FINE COPIA HASH NEL TXT


   // INIZIO CHIAMATA DB
          try {               
            database db("Domande.db");

            db << u"insert into Corrette (QUEST1,CONGIUNZIONE,AGGETTIVO,PUNTOESC) values (?,?,?,?);"
            << quest1
            << congiunzione
            << posi
            << puntoesc;

            cout << "OK id= " << db.last_insert_rowid() << endl;

              }

              catch (exception& e) {
                cout << e.what() << endl;

              }
   
   //FINE CHIAMATA DB




            break;
    } while (true); //FINE CONTROLLO HASH IN TXT
}

9 Risposte

  • Re: Problemino programma

    Guarda che la if di cui parli è questa
    
            if (res.find(hash) != res.end())
                cout << " exist." << endl;
            else
              cout << "not exists, copying..." <<endl;
    
    Ora non capisco cosa ti aspetti da questa if
  • Re: Problemino programma

    Esatto, come vedi quell if in parole povere mi vede se l hash è contenuto nel txt, se ci sta me lo segnala stampandomi "exist" e qui pero vorrei che non mi mandasse nel db la frase di parole generata.
    infatti l else funziona, mi vede che non è presente l hash nel txt e procede con l upload nel db.
  • Re: Problemino programma

    No ... non mi sono spiegato ...

    Nel tuo codice la if esegue solo una riga e la else esegue solo un'altra riga.

    Sai come funziona una if...else quando vuoi eseguire più di una riga?
  • Re: Problemino programma

    Si, certo, if viene eseguito solo se il contenuto nelle tonde si rivela vero. e Else sta per "altrimenti" quindi qualora if risultasse falso else esegue la sua istruzione.

    Ma comunque mi serve aiuto a sistemare il codice, come detto sto cercando un modo per evitare l esecuzione della query sql qualora l if risultasse vero.
  • Re: Problemino programma

    Quindi devi mettere il codice dell'esecuzione della query sql SOLO nella parte else ... giusto? Mi sembra semplice...
  • Re: Problemino programma

    Nell else mi sembra di aver messo il blocco di istruzione che manda l hash nel txt (appunto perche l' if si è rivelato falso) e mi sembra di aver messo a seguire anche il try-catch con la query sql o mi sta sfuggendo qualche errore sintattico?
  • Re: Problemino programma

    Nella else, come ti dicevo, hai messo SOLO una istruzione, non hai messo nessun blocco. Rileggi quello che ti ho scritto sulla if-else prima.
  • Re: Problemino programma

    Risolto, mancavano le graffe nell else, l ho aperte e chiuse contenendo il blocco della query sql e adesso funziona. grazie mille maledette graffe, un giorno di questi passo a python hehe
  • Re: Problemino programma

    jarvis1 ha scritto:


    Risolto, mancavano le graffe
    E' quello che tento di farti notare sin dall'inizio, chiedendoti se sapevi come funzionasse la if-else
    maledette graffe, un giorno di questi passo a python hehe
    Io le trovo molto comode, molto più di controllare la corretta indentazione...
Devi accedere o registrarti per scrivere nel forum
9 risposte