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++ - Domande su Domande sempre sotto OS Ubuntu
Forum - C/C++ - Domande su Domande sempre sotto OS Ubuntu

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 20:56
Giovedì, 10/09/2009
Salve a tutti scusate se continuo a scassarvi con le mie banali domande ma sono appena entrato nel mondo linux oggi con una nuova domanda x voi, allora(non si comincia mai un discorso con allora, ihih) ho creato un database per tutti i vari codici che incontro e che mi voglio ricordare il codice è questo:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6. int main(){
  7. int scelta;
  8. string nome_utente, genere_linguaggio, testo;
  9.  
  10. cout << "Database codici creato in C++" << endl << endl;
  11.  
  12. cout << "Scegli-> " << "1: Scrivi su Database " << "2: Leggi da Database";
  13. cout << endl << "Scelta-> ";
  14. cin >> scelta;
  15. if(scelta=="1"){
  16. cout << "Inserisci il Nome Utente: ";
  17. cin >> nome_utente;
  18. cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
  19. cin >> genere_linguaggio;
  20. WriteCode ofstream("/home/" << nome_utente.c_str() << genere_linguaggio.c_str() << ".dat", ios::out);
  21. cout << "Scrivi il codice: ";
  22. getline(cin,testo);
  23. WriteCode << testo;
  24. WriteCode.close();
  25. }else{
  26. cout << "Inserisci il Nome Utente: ";
  27. cin >> nome_utente;
  28. cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
  29. cin >> genere_linguaggio;
  30. ReadCode ifstream("/home/" << nome_utente.c_str() << genere_linguaggio.c_str() << ".dat", ios::in);
  31. while(!ReadCode.eof()){
  32. cout << ReadCode;
  33. ReadCode.close();
  34. }
  35. }
  36. return 0;
  37. }



e l'errore di compilazione è il seguente:

Database.c: In function ‘int main()’:
Database.c:15: error: ISO C++ forbids comparison between pointer and integer
Database.c:20: error: ‘WriteCode’ was not declared in this scope
Database.c:20: error: expected `;' before ‘ofstream’
Database.c:30: error: ‘ReadCode’ was not declared in this scope
Database.c:30: error: expected `;' before ‘ifstream’

:hail::hail:Non lasciatemi da solo in questo buoi cammino( :cheer: )
:k:

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:06
Giovedì, 10/09/2009
Testo quotato

Postato originariamente da LittleHacker:
sono appena entrato nel mondo linux



Non c'entra il mondo Linux ... il fatto e' che non hai le basi della programmazione C/C++ ...

Il primo errore e' nella riga

Codice sorgente - presumibilmente Plain Text

  1. if(scelta=="1"){



in cui confronti un char con una stringa (quindi un int con un puntatore) che e' quello che ti rimprovera il compilatore.

Avresti avuto questo errore con qualsiasi compilatore e qualsiasi sistema operativo ... ti serve un libro di C/C++ di base, non importa con quale sistema operi.

PM Quote
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 16:41
Venerdì, 11/09/2009
Allora:
if(scelta=="1") è sbagliato anche perchè se usi il comando cin dentro scelta ti troverai il numero corrispondente al codice ASCII del tasto che hai premuto(se premi il tasto 1 scelta non è 1), percui sostituisci semplicemente int scelta; con string scelta; e vedrai che tutto funzionerà.
Codice sorgente - presumibilmente Plain Text

  1. WriteCode ofstream("/home/" << nome_utente.c_str() << genere_linguaggio.c_str() << ".dat", ios::out)


non funzionerà mai perchè devi intanto invertire ofstream e WriteCode e poi io ti sconsiglio ampiamente di usare << nelle dichiarazioni ma di usare sempre +. Se in linux non funziona dichiara una stringa path e caricaci dentro il valore della cartella. Non sono neanche sicuro che funzioni "/home/" però puoi provare.
Altra miglioria: non mettere mai le maiuscole nelle cose che dichiari perché il compilatore può far confusione (per certi "A" è uguale a "a", per altri le due cose sono differenti).
Il codice corretto sta qui sotto ma attento: COPIALO SOLO DOPO AVER LETTO QUI SOPRA E AVER CONSULTATO QUESTA PAGINA CHE CONTIENE UNA BELLISSIMA SPIEGAZIONE DEGLI INPUT/OUTPUT:
http://www.pierotofy.it/pages/guide_tutorials/CPlusPlus/Is ...
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6. int main(){
  7. string scelta;
  8. string nome_utente, genere_linguaggio, testo;
  9.  
  10. cout << "Database codici creato in C++" << endl << endl;
  11.  
  12. cout << "Scegli-> " << "1: Scrivi su Database " << "2: Leggi da Database";
  13. cout << endl << "Scelta-> ";
  14. cin >> scelta;
  15. if(scelta=="1"){
  16. cout << "Inserisci il Nome Utente: ";
  17. cin >> nome_utente;
  18. cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
  19. cin >> genere_linguaggio;
  20. string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
  21. ofstream WirteCode(path, ios::out);
  22. cout << "Scrivi il codice: ";
  23. getline(cin,testo);
  24. WriteCode << testo;
  25. WriteCode.close();
  26. }else{
  27. cout << "Inserisci il Nome Utente: ";
  28. cin >> nome_utente;
  29. cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
  30. cin >> genere_linguaggio;
  31. string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
  32. ofstream ReadCode(path, ios::out);
  33. while(!ReadCode.eof()){
  34. cout << ReadCode;
  35. }
  36. ReadCode.close();
  37. }
  38. return 0;
  39. }


MODIFICA: ATTENZIONE NON PUOI CHIUDERE UNO STREAM DENTRO UN CICLO!!!

Ultima modifica effettuata da edo42 il 11/09/2009 alle 16:43
PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 18:25
Venerdì, 11/09/2009
Testo quotato

Postato originariamente da edo42:

Allora:
if(scelta=="1") è sbagliato anche perchè se usi il comando cin dentro scelta ti troverai il numero corrispondente al codice ASCII del tasto che hai premuto(se premi il tasto 1 scelta non è 1), percui sostituisci semplicemente int scelta; con string scelta; e vedrai che tutto funzionerà.
Codice sorgente - presumibilmente Plain Text

  1. WriteCode ofstream("/home/" << nome_utente.c_str() << genere_linguaggio.c_str() << ".dat", ios::out)


non funzionerà mai perchè devi intanto invertire ofstream e WriteCode e poi io ti sconsiglio ampiamente di usare << nelle dichiarazioni ma di usare sempre +. Se in linux non funziona dichiara una stringa path e caricaci dentro il valore della cartella. Non sono neanche sicuro che funzioni "/home/" però puoi provare.
Altra miglioria: non mettere mai le maiuscole nelle cose che dichiari perché il compilatore può far confusione (per certi "A" è uguale a "a", per altri le due cose sono differenti).
Il codice corretto sta qui sotto ma attento: COPIALO SOLO DOPO AVER LETTO QUI SOPRA E AVER CONSULTATO QUESTA PAGINA CHE CONTIENE UNA BELLISSIMA SPIEGAZIONE DEGLI INPUT/OUTPUT:
http://www.pierotofy.it/pages/guide_tutorials/CPlusPlus/Is ...
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6. int main(){
  7. string scelta;
  8. string nome_utente, genere_linguaggio, testo;
  9.  
  10. cout << "Database codici creato in C++" << endl << endl;
  11.  
  12. cout << "Scegli-> " << "1: Scrivi su Database " << "2: Leggi da Database";
  13. cout << endl << "Scelta-> ";
  14. cin >> scelta;
  15. if(scelta=="1"){
  16. cout << "Inserisci il Nome Utente: ";
  17. cin >> nome_utente;
  18. cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
  19. cin >> genere_linguaggio;
  20. string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
  21. ofstream WirteCode(path, ios::out);
  22. cout << "Scrivi il codice: ";
  23. getline(cin,testo);
  24. WriteCode << testo;
  25. WriteCode.close();
  26. }else{
  27. cout << "Inserisci il Nome Utente: ";
  28. cin >> nome_utente;
  29. cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
  30. cin >> genere_linguaggio;
  31. string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
  32. ofstream ReadCode(path, ios::out);
  33. while(!ReadCode.eof()){
  34. cout << ReadCode;
  35. }
  36. ReadCode.close();
  37. }
  38. return 0;
  39. }


MODIFICA: ATTENZIONE NON PUOI CHIUDERE UNO STREAM DENTRO UN CICLO!!!



Grazie mille...La stronzata + grande ke ho fatto è stat quella di invertire l'ordine SaveCode ofstream invece ke ofstream SaveCode comunque grazie mille anche della guida...:k::pat::hail:

PM Quote
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 18:48
Venerdì, 11/09/2009
Se hai bisogno di qualcosa chiedi pure io sono sempre qui per risponderti

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 19:01
Venerdì, 11/09/2009
Boh mi da sempre errori su errori(ho letto l'articolo ke mi hai dato con il link ed è quello che ho fatto ma mi da sempre errori ad esempio uno è quello dell'operatore "+"

Questo è il codice:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6. int main()
  7. {
  8. string nome_utente, genere, percorso, scelta, testo;
  9. cout << "Database codici creato in C++" << endl << endl;
  10.  
  11. cout << "Scegli-> 1:Scrivi codici su Database  2:Leggi codici da Database" << endl << "Scelta-> ";
  12. cin >> scelta;
  13. if(scelta=="1"){
  14.       cout << "Inserisci Nome Utente: ";
  15.       cin >> nome_utente;
  16.       cout << "Inserisci genere linguaggio(ex. C++): ";
  17.       cin >> genere;
  18.       string path = "/home/database/" + genere.c_str() + ".dat";
  19.       ofstream write(path, ios::out);
  20. cout << "Scrivi il codice da inserire nel Database: " << endl << "Ex: switch(){} \\commento" << endl << "NB: il codice devi scriverlo senza nadare a capo";
  21.       cout << endl;
  22.       getline(cin,testo);
  23.       write << testo;
  24.       write.close;
  25. }else{
  26.       cout << "Inserisci Nome Utente: ";
  27.       cin >> nome_utente;
  28.       cout << "Inserisci genere linguaggio(ex. C++): ";
  29.       cin >> genere;
  30.       string path = "/home/database/" + genere.c_str() + ".dat";
  31.       ifstream read(path, ios::in);
  32.       while(!read.eof()){
  33.       cout << read;
  34.       }
  35.       read.close();
  36. }
  37. return 0;
  38. }



E questi sono i suoi relativi errori( :grr: ):

code.c: In function ‘int main()’:
code.c:18: error: invalid operands of types ‘const char [16]’ and ‘const char*’ to binary ‘operator+’
code.c:19: error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, const std::_Ios_Openmode&)’
/usr/include/c++/4.3/fstream:572: note: candidates are: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/fstream:556: note:                 std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/iosfwd:89: note:                 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)
code.c:24: error: statement cannot resolve address of overloaded function
code.c:30: error: invalid operands of types ‘const char [16]’ and ‘const char*’ to binary ‘operator+’
code.c:31: error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&, const std::_Ios_Openmode&)’
/usr/include/c++/4.3/fstream:442: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/fstream:428: note:                 std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.3/iosfwd:86: note:                 std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:29
Venerdì, 11/09/2009
Non te la prendere ma con questo tipo di approccio non imparerai a programmare in C++.

Devi usare dei libri, studiare argomento dopo argomento, con pazienza e tempo.

Altrimenti perderai solo tempo.

PM Quote
Avatar
edo42 (Member)
Pro


Messaggi: 102
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 19:34
Venerdì, 11/09/2009
Questo funziona perfettamente l'ho testato.
I problemi erano:
non possiamo usare c_str() se dobbiamo mettere il valore di una stringa in una stringa!! In questo modo al posto di fare stringa = stringa + stringa + stringa diventa stringa = stringa + const char + stringa!!
Il comando c_str() è da usare invece dove usiamo il ofstream.
Comunque il codice è:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cstdlib>
  5. using namespace std;
  6. int main()
  7. {
  8.         string nome_utente, genere, percorso, scelta, testo;
  9.         cout << "Database codici creato in C++" << endl << endl;
  10.         cout << "Scegli-> 1:Scrivi codici su Database  2:Leggi codici da Database" << endl << "Scelta-> ";
  11.         cin >> scelta;
  12.         if(scelta=="1"){
  13.                 cout << "Inserisci Nome Utente: ";
  14.                 cin >> nome_utente;
  15.                 cout << "Inserisci genere linguaggio(ex. C++): ";
  16.                 cin >> genere;
  17.                 string path = "/home/database/" + genere + ".dat";
  18.                 ofstream write(path.c_str(), ios::out);
  19.                 cout << "Scrivi il codice da inserire nel Database: " << endl << "Ex: switch(){} \\commento" << endl << "NB: il codice devi scriverlo senza nadare a capo";
  20.                 cout << endl;
  21.                 getline(cin,testo);
  22.                 write << testo;
  23.                 write.close();
  24.         }else{
  25.                 cout << "Inserisci Nome Utente: ";
  26.                 cin >> nome_utente;
  27.                 cout << "Inserisci genere linguaggio(ex. C++): ";
  28.                 cin >> genere;
  29.                 string path = "/home/database/" + genere + ".dat";
  30.                 ifstream read(path.c_str(), ios::in);
  31.                 while(!read.eof()){
  32.                         cout << read;
  33.                 }
  34.                 read.close();
  35.         }
  36.         return 0;
  37. }


PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 21:38
Venerdì, 11/09/2009
#edo42: Grazie mille per tutto

#theprogrammer: cosa mi consigli(un libro)?
:k:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo