Oppure

Loading
10/09/09 18:56
LittleHacker
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:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main(){
int scelta;
string nome_utente, genere_linguaggio, testo;

cout << "Database codici creato in C++" << endl << endl;

cout << "Scegli-> " << "1: Scrivi su Database " << "2: Leggi da Database";
cout << endl << "Scelta-> ";
cin >> scelta;
if(scelta=="1"){
cout << "Inserisci il Nome Utente: ";
cin >> nome_utente;
cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
cin >> genere_linguaggio;
WriteCode ofstream("/home/" << nome_utente.c_str() << genere_linguaggio.c_str() << ".dat", ios::out);
cout << "Scrivi il codice: ";
getline(cin,testo);
WriteCode << testo;
WriteCode.close();
}else{
cout << "Inserisci il Nome Utente: ";
cin >> nome_utente;
cout << endl << "Inserisci il genre di linguaggio(ex. C++): ";
cin >> genere_linguaggio;
ReadCode ifstream("/home/" << nome_utente.c_str() << genere_linguaggio.c_str() << ".dat", ios::in);
while(!ReadCode.eof()){
cout << ReadCode;
ReadCode.close();
}
}
return 0;
}


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:
aaa
10/09/09 19:06
theprogrammer
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

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.
aaa
11/09/09 14:41
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à.
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:
pierotofy.it/pages/guide_tutorials/CPlusPlus/Istruzione_sui_FILE/
#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 
using namespace std; 
int main(){ 
string scelta; 
string nome_utente, genere_linguaggio, testo; 

cout << "Database codici creato in C++" << endl << endl; 

cout << "Scegli-> " << "1: Scrivi su Database " << "2: Leggi da Database"; 
cout << endl << "Scelta-> "; 
cin >> scelta; 
if(scelta=="1"){ 
cout << "Inserisci il Nome Utente: "; 
cin >> nome_utente; 
cout << endl << "Inserisci il genre di linguaggio(ex. C++): "; 
cin >> genere_linguaggio; 
string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
ofstream WirteCode(path, ios::out);
cout << "Scrivi il codice: "; 
getline(cin,testo); 
WriteCode << testo; 
WriteCode.close(); 
}else{ 
cout << "Inserisci il Nome Utente: "; 
cin >> nome_utente; 
cout << endl << "Inserisci il genre di linguaggio(ex. C++): "; 
cin >> genere_linguaggio; 
string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
ofstream ReadCode(path, ios::out);
while(!ReadCode.eof()){ 
cout << ReadCode; 
}
ReadCode.close(); 
} 
return 0; 
} 

MODIFICA: ATTENZIONE NON PUOI CHIUDERE UNO STREAM DENTRO UN CICLO!!!
Ultima modifica effettuata da edo42 11/09/09 14:43
aaa
11/09/09 16:25
LittleHacker
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à.
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:
pierotofy.it/pages/guide_tutorials/CPlusPlus/Istruzione_sui_FILE/
#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 
using namespace std; 
int main(){ 
string scelta; 
string nome_utente, genere_linguaggio, testo; 

cout << "Database codici creato in C++" << endl << endl; 

cout << "Scegli-> " << "1: Scrivi su Database " << "2: Leggi da Database"; 
cout << endl << "Scelta-> "; 
cin >> scelta; 
if(scelta=="1"){ 
cout << "Inserisci il Nome Utente: "; 
cin >> nome_utente; 
cout << endl << "Inserisci il genre di linguaggio(ex. C++): "; 
cin >> genere_linguaggio; 
string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
ofstream WirteCode(path, ios::out);
cout << "Scrivi il codice: "; 
getline(cin,testo); 
WriteCode << testo; 
WriteCode.close(); 
}else{ 
cout << "Inserisci il Nome Utente: "; 
cin >> nome_utente; 
cout << endl << "Inserisci il genre di linguaggio(ex. C++): "; 
cin >> genere_linguaggio; 
string path = "/home/" + nome_utente.c_str() + genere_linguaggio.c_str() + ".dat"
ofstream ReadCode(path, ios::out);
while(!ReadCode.eof()){ 
cout << ReadCode; 
}
ReadCode.close(); 
} 
return 0; 
} 

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:
aaa
11/09/09 16:48
edo42
Se hai bisogno di qualcosa chiedi pure io sono sempre qui per risponderti
aaa
11/09/09 17:01
LittleHacker
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:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
string nome_utente, genere, percorso, scelta, testo;
cout << "Database codici creato in C++" << endl << endl;

cout << "Scegli-> 1:Scrivi codici su Database  2:Leggi codici da Database" << endl << "Scelta-> ";
cin >> scelta;
if(scelta=="1"){
      cout << "Inserisci Nome Utente: ";
      cin >> nome_utente;
      cout << "Inserisci genere linguaggio(ex. C++): ";
      cin >> genere;
      string path = "/home/database/" + genere.c_str() + ".dat";
      ofstream write(path, ios::out);
cout << "Scrivi il codice da inserire nel Database: " << endl << "Ex: switch(){} \commento" << endl << "NB: il codice devi scriverlo senza nadare a capo";
      cout << endl;
      getline(cin,testo);
      write << testo;
      write.close;
}else{
      cout << "Inserisci Nome Utente: ";
      cin >> nome_utente;
      cout << "Inserisci genere linguaggio(ex. C++): ";
      cin >> genere;
      string path = "/home/database/" + genere.c_str() + ".dat";
      ifstream read(path, ios::in);
      while(!read.eof()){
      cout << read;
      }
      read.close();
}
return 0;
}


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> >&;)
aaa
11/09/09 17:29
theprogrammer
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.
aaa
11/09/09 17:34
edo42
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 è:
#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstdlib> 
using namespace std; 
int main() 
{ 
	string nome_utente, genere, percorso, scelta, testo; 
	cout << "Database codici creato in C++" << endl << endl; 
	cout << "Scegli-> 1:Scrivi codici su Database  2:Leggi codici da Database" << endl << "Scelta-> "; 
	cin >> scelta; 
	if(scelta=="1"){ 
		cout << "Inserisci Nome Utente: "; 
		cin >> nome_utente; 
		cout << "Inserisci genere linguaggio(ex. C++): "; 
		cin >> genere; 
		string path = "/home/database/" + genere + ".dat"; 
		ofstream write(path.c_str(), ios::out); 
		cout << "Scrivi il codice da inserire nel Database: " << endl << "Ex: switch(){} \commento" << endl << "NB: il codice devi scriverlo senza nadare a capo"; 
		cout << endl; 
		getline(cin,testo); 
		write << testo; 
		write.close(); 
	}else{ 
		cout << "Inserisci Nome Utente: "; 
		cin >> nome_utente; 
		cout << "Inserisci genere linguaggio(ex. C++): "; 
		cin >> genere; 
		string path = "/home/database/" + genere + ".dat"; 
		ifstream read(path.c_str(), ios::in); 
		while(!read.eof()){ 
			cout << read; 
		} 
		read.close(); 
	} 
	return 0; 
}
aaa