Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema visualizzazione dati
Forum - C/C++ - Problema visualizzazione dati

Avatar
Line1 (Normal User)
Newbie


Messaggi: 1
Iscritto: 27/03/2009

Segnala al moderatore
Postato alle 19:47
Venerdì, 27/03/2009
Ciao a tutti, sono nuovo del forum.
Sto provando a scrivere un basilare programma gestionale in C++. Il problema è che quando inserisco il nome dell'articolo da cercare (in questo caso libri), stampa sullo schermo tutti i libri presenti nella lista. Inoltre, i vari dati relativi ai libri non sono visualizzati in colonna, come vorrei, ma posizionati tutti su una riga. Non riesco a venire a capo al problema:doubt:. Ecco il codice:
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main(void)
  5. {
  6.     int userinput;
  7.     int book1 = ('20000 leghe sotto i mari');
  8.     int book2 = ('Viaggio straordinario nel regno delle sette torri');
  9.     char endUse;
  10.    
  11.    
  12.    
  13.    
  14.     cout << "Book Manager v.0.0.1 beta version"
  15.     << endl;
  16.     do
  17.     {
  18.             cout << "Inserisci il titolo di un libro: ";
  19.             cin >> userinput;
  20.             if(userinput = book1){
  21.                          cout << "TITOLO: 20000 leghe sotto i mari";
  22.                          cout << "AUTORE: Jules Verne";
  23.                          cout << "CASA EDITRICE: EINAUDI";
  24.                          cout << "ANNO: 2005" << endl;
  25.                          }else{
  26.                                cout << "Questo libro non è inserito nella lista.";
  27.                                }
  28.     if(userinput = book2){
  29.                  cout << "TITOLO: Viaggio straordinario nel regno delle sette torri";
  30.                  cout << "AUTORE: Tenor Arthur";
  31.                  cout << "CASA EDITRICE: HOEPLI";
  32.                  cout << "ANNO: 2009" << endl << endl;
  33.                  }else{
  34.                        cout << "Questo libro non è inserito nella lista.";
  35.                        }
  36.                        
  37. cout << "Ricerca terminata. " << endl;
  38. cin >> endUse;
  39. }while (endUse == 'Y' || endUse == 'y');
  40. system("PAUSE");
  41. return 0;
  42. }


Spero di essere stato chiaro. Ciao a tutti.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 12:39
Sabato, 28/03/2009
Ciao,
Io non conosco il c++, solo il c ma devo dire che è abbastanza comprensibile;)
In ogni caso penso che il problema sia indipendente da c o c++ .
Infatti ti stampa tutti i libri perché nei controlli if che fai

Testo quotato

if(userinput = 1)



Metti un uguale solo :)
In c(++) equivale ad un assegnazione non ad un controllo. Per fare quello che vuoi fare tu devi mettere ==.
In ogni caso penso sia una dimenticanza dato che alla fine li hai messi :P

EDIT
Prima ero sul cellulare e non ho notato che il vero problema in realtà è un altro :P
Perchè definisci i nomi dei due libri come int? non dovrebbero essere stringhe? :P
Anche nel cin assegni una stringa (l'utente deve scriverlo per intero il nome del libro o deve solo scrivere 1 o 2 per vedere il libro corrispondente a quel numero?) ad una variabile intera.

In definitiva dovresti cambiare il tipo delle tue variabili book1 e book2 in

Codice sorgente - presumibilmente C/C++

  1. char book1[MAX_LUNGHEZZA_NOME];
  2. char book2[MAX_LUNGHEZZA_NOME];



e usarle come stringhe ;)

Poi eseguire il controllo del nome inserito usando la funzione strcmp

Codice sorgente - presumibilmente Plain Text

  1. if(strcmp(userinput, book1) == 0)
  2.     cout << blablabla



la strcmp restituisce il valore 0 solo se le due stringhe sono uguali :)

Ultima cosa: non te li stampa in colonna perchè (almeno nel c) dovresti inserire un \n per andare a capo ;)

Ultima modifica effettuata da il 28/03/2009 alle 13:12
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 12:40
Sabato, 28/03/2009
EDIT: ops ho postato 2 volte 8-|

Ultima modifica effettuata da il 28/03/2009 alle 12:55
PM Quote
Avatar
mr_verb (Normal User)
Newbie


Messaggi: 4
Iscritto: 28/03/2009

Segnala al moderatore
Postato alle 15:14
Sabato, 28/03/2009
Ciao sono Line1. Per un problema di password dimenticata, mi sono registrato con un nuovo nick.
Ho provato le soluzioni. Risultato: non funziona! Ho seguito le tue istruzioni:
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main(void)
  5. {
  6.     int userinput;
  7.     char book1 ('20000 leghe sotto i mari');
  8.     char book2 ('Viaggio straordinario nel regno delle sette torri');
  9.     char endUse;
  10.    
  11.    
  12.    
  13.    
  14.     cout << "Book Manager v.0.0.1 beta version"
  15.     << endl;
  16.     do
  17.     {
  18.             cout << "Inserisci il titolo di un libro: ";
  19.             cin >> userinput;
  20.             if(strcmp(userinput, book1) == 0){
  21.                          cout << "TITOLO: 20000 leghe sotto i mari\n";
  22.                          cout << "AUTORE: Jules Verne\n";
  23.                          cout << "CASA EDITRICE: EINAUDI\n";
  24.                          cout << "ANNO: 2005\n" << endl;
  25.                          }else{
  26.                                cout << "Questo libro non è inserito nella lista.\n";
  27.                                }
  28.     if(strcmp(userinput, book2) == 0){
  29.                  cout << "TITOLO: Viaggio straordinario nel regno delle sette torri\n";
  30.                  cout << "AUTORE: Tenor Arthur\n";
  31.                  cout << "CASA EDITRICE: HOEPLI\n";
  32.                  cout << "ANNO: 2009\n" << endl << endl;
  33.                  }else{
  34.                        cout << "Questo libro non è inserito nella lista.\n";
  35.                        }
  36.                        
  37. cout << "Ricerca terminata. \n" << endl;
  38. cin >> endUse;
  39. }while (endUse == 'Y' || endUse == 'y');
  40. system("PAUSE");
  41. return 0;
  42. }


Ma Dev-C++ riporta il seguente errore: " invalid conversion from 'int' to 'const char*' " ed evidenzia la riga " if(strcmp(userinput, book1) == 0){ " Non funziona neanche il comando per andare a capo...

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:03
Sabato, 28/03/2009
Codice sorgente - presumibilmente C/C++

  1. int userinput;
  2.     char book1 ('20000 leghe sotto i mari');
  3.     char book2 ('Viaggio straordinario nel regno delle sette torri');



La prima parte dei problemi sta qui ;)
La strcmp non funziona perchè tu cerchi di comparare un intero ad una stringa.
Anche userinput dovrebbe essere di tipo char.
Se l'utente deve inserire il titolo del libro non sta scrivendo un numero quindi userinput NON può essere un numero ;)

Inoltre non so come si dichiarino le stringhe in c++ ma suppongo che non si distacchino molto dal c quindi anche il modo in cui hai dichiarato book1 e book2 è sbagliato.
in c la dichiarerei così

Codice sorgente - presumibilmente C/C++

  1. char book1[MAX_LUNGHEZZA], book2[MAX_LUNGHEZZA];
  2.  
  3. book1[] = "20000 leghe sotto i mari\0";
  4. book2[] = "Viaggio straordinario nel regno delle sette torri\0";



Ovviamente MAX_LUNGHEZZA la devi definire con un define. Inoltre devi usare i doppi apici perchè i singoli apici vanno bene se si tratta di un singolo carattere.
Le parentesi tonde invece non centrano nulla ;)  
Purtroppo non puoi affrontare le stringhe senza prima averle studiate. Sono più complesse del semplice inserire numeri ;)
Il mio consiglio e quindi di andertele a vedere in qualche tutorial qua su pierotofy (mi pare ce ne siano^^)    

PM Quote