Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-08-2008, 03:41   #1
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
[C++]Stringa Composta? Stringa -> riga in file?

Ciao a tutti, innanzitutto programmo in C++ da 1 giorno dopo che ho da sempre programmato in pascal (, velocità di esecuzione pari a 0...), quindi non ammazzatemi subito


Allora, praticamente il mio problema è quello di creare una stringa composta da usare poi come nome per un file.

Mi spiego meglio:


Codice:
string dst,name;  int i;

cout << "Quanti file devo creare?" << endl;
cin >> N;
cout << "Inserisci il percorso in cui salvarli" << endl;
cin >> dst;

for (i=0; i<=N; i++)
  {
     --altre istruzioni del for--

     name = dst + i + "." + rand()%10 + rand()%10 + rand()%10;

     --altre istruzioni del for--
  }
Quell'assegnamento mi risulta in una grossa nuvola di vapore, mentre in Pascal potevo tranquillamente farlo e la stringa creata era ad esempio

c:\test\255.671


Qualcuno potrebbe aiutarmi?

Inoltre, come faccio a scrivere una riga in un file ?

il file lo apro con

Codice:
FILE *stream = fopen("c:\\programdata.txt","w");
e posso aggiungere righe con

Codice:
fprintf(stream,"%d",variabileinteraacaso);
o con gli altri identificatori della printf.

Il problema arriva quando tento di fare questo:

Codice:
frpintf(stream,"%s",variabilestringaacaso);
che mi restituisce un bel

Codice:
30 D:\Documents and Settings\Nik\Documenti\C++\TUHDSS.cpp [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime

demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2008, 22:08   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da demonbl@ck Guarda i messaggi
[...] Mi spiego meglio:

Codice:
string dst,name;  int i;

cout << "Quanti file devo creare?" << endl;
cin >> N;
cout << "Inserisci il percorso in cui salvarli" << endl;
cin >> dst;

for (i=0; i<=N; i++)
  {
     --altre istruzioni del for--

     name = dst + i + "." + rand()%10 + rand()%10 + rand()%10;

     --altre istruzioni del for--
  }
Quell'assegnamento mi risulta in una grossa nuvola di vapore, mentre in Pascal potevo tranquillamente farlo e la stringa creata era ad esempio

c:\test\255.671
devi usare uno stringstream; prova così:
Codice:
	for (int i = 0; i < N; i++)
	{
		string dst = "C:\\test\\";
		ostringstream oss;
		oss << dst << i << "." << (rand() % 10 + rand() % 10 + rand() % 10);
		string name = oss.str();
	}


Quote:
Inoltre, come faccio a scrivere una riga in un file ?
classe ofstream (sta per "Output File Stream"); qui il reference: http://www.cplusplus.com/reference/iostream/ofstream/


Quote:
il file lo apro con

Codice:
FILE *stream = fopen("c:\\programdata.txt","w");
e posso aggiungere righe con

Codice:
fprintf(stream,"%d",variabileinteraacaso);
o con gli altri identificatori della printf.
ARGH, non usare la libreria di I/O del C in C++


Quote:
Il problema arriva quando tento di fare questo:

Codice:
frpintf(stream,"%s",variabilestringaacaso);
che mi restituisce un bel

Codice:
30 D:\Documents and Settings\Nik\Documenti\C++\TUHDSS.cpp [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime
il warning ti dice che secondo il format string quel parametro doveva essere un puntatore a char, non un oggetto std::string; e ovviamente ha ragione. per ottenere il puntatore al buffer di caratteri contenuto in una std::string devi usare il metodo c_str:
http://www.cplusplus.com/reference/s...ing/c_str.html

ma come ti ho già spiegato, in C++ usa la libreria di I/O delle STL, che è anche più facile da usare (non ci sono format string).
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2008, 01:36   #3
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
Quote:
Originariamente inviato da 71104 Guarda i messaggi
devi usare uno stringstream; prova così:
Codice:
	for (int i = 0; i < N; i++)
	{
		string dst = "C:\\test\\";
		ostringstream oss;
		oss << dst << i << "." << (rand() % 10 + rand() % 10 + rand() % 10);
		string name = oss.str();
	}
Mi dice

Codice:
26 D:\Documents and Settings\Nik\Documenti\C++\TUHDSS.cpp aggregate `std::stringstream oss' has incomplete type and cannot be defined

Quote:
Originariamente inviato da 71104 Guarda i messaggi
classe ofstream (sta per "Output File Stream"); qui il reference: http://www.cplusplus.com/reference/iostream/ofstream/


ARGH, non usare la libreria di I/O del C in C++


il warning ti dice che secondo il format string quel parametro doveva essere un puntatore a char, non un oggetto std::string; e ovviamente ha ragione. per ottenere il puntatore al buffer di caratteri contenuto in una std::string devi usare il metodo c_str:
http://www.cplusplus.com/reference/s...ing/c_str.html

ma come ti ho già spiegato, in C++ usa la libreria di I/O delle STL, che è anche più facile da usare (non ci sono format string).
Perfetto. ora riesco sia a leggere che a scrivere un file. Grazie
Ho solo un problema: non riesco ad andare a capo.

se io metto

Codice:
outfile << "stringaperprovare" << endl << DST;
al posto di andare a capo mi scrive

Codice:
stringaperprovare[caratterestrano]c:\uindov\sistemtrentadue\
lo stesso se provo con

Codice:
outfile << "stringaperprovare \n" << DST;
Ovviamente c:\uindov\sistemtrentadue\ è un valore a caso che ho dato io a DST

ancora questo piccolo helpettino e ce la posso fare


EDIT:

altro problemino,
Codice:
  ofstream outfile (dst,ofstream::binary);
in cui dst è una stringa contenente il nome del file mi restituisce

Codice:
24 D:\Documents and Settings\Nik\Documenti\C++\TUHDFS.cpp no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, const std::_Ios_Openmode&)'
:|

Ultima modifica di demonbl@ck : 02-08-2008 alle 02:16.
demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2008, 07:39   #4
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da demonbl@ck Guarda i messaggi
Mi dice

Codice:
26 D:\Documents and Settings\Nik\Documenti\C++\TUHDSS.cpp aggregate `std::stringstream oss' has incomplete type and cannot be defined
hai incluso <sstream> ?


Quote:
Perfetto. ora riesco sia a leggere che a scrivere un file. Grazie
Ho solo un problema: non riesco ad andare a capo. [...]
l'uso di endl al posto di "\n" in teoria serve proprio ad eliminare il problema; non specificare alcuna modalità di apertura al costruttore di ofstream, lascia quelle di default:
Codice:
ofstream outfile("nome e percorso");

Quote:
Ovviamente c:\uindov\sistemtrentadue\ è un valore a caso che ho dato io a DST
bellissimo


Quote:
altro problemino,
Codice:
  ofstream outfile (dst,ofstream::binary);
in cui dst è una stringa contenente il nome del file mi restituisce

Codice:
24 D:\Documents and Settings\Nik\Documenti\C++\TUHDFS.cpp no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, const std::_Ios_Openmode&)'
:|
uhm, hai incluso <fstream> ?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2008, 08:26   #5
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
Quote:
Originariamente inviato da 71104 Guarda i messaggi
hai incluso <sstream> ?


l'uso di endl al posto di "\n" in teoria serve proprio ad eliminare il problema; non specificare alcuna modalità di apertura al costruttore di ofstream, lascia quelle di default:
Codice:
ofstream outfile("nome e percorso");

bellissimo


uhm, hai incluso <fstream> ?
Ottimo, adesso va a capo (non so per quale oscuro motivo avevo aperto il file in modalità binary ).

Però restano due problemi:

1)Se provo ad usare OSS per aprire un file mi butta fuori

Codice:
46 D:\Documents and Settings\Nik\Documenti\C++\TUHDFS.cpp invalid conversion from `void*' to `const char*' 

46 D:\Documents and Settings\Nik\Documenti\C++\TUHDFS.cpp   initializing argument 1 of `std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]'
2) se provo a usare OSS all'esterno del for mi dice undeclared( )

3)se invece di OSS per aprire il file provo con DST (dandogli un valore opportuno) ottengo sempre

Codice:
23 D:\Documents and Settings\Nik\Documenti\C++\TUHDFS.cpp no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&)'
E SI, ho abilitato sia sstream (adesso va OSS e prima no) che fstream (già da prima)
demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2008, 13:24   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da demonbl@ck Guarda i messaggi
1)Se provo ad usare OSS per aprire un file mi butta fuori [...]
l'ostringstream non va usato per aprire files, serve solo a costruire stringhe infilandoci pezzi di ogni tipo con l'operatore <<. è un mezzo di I/O mappato su una stringa anziché su un file.


Quote:
2) se provo a usare OSS all'esterno del for mi dice undeclared( )
se l'hai dichiarato all'interno mi pare il minimo... sai cos'è uno scope? te la faccio breve, la dichiarazione di una variabile ha valore solo all'interno del blocco in cui la dichiari; appena sei fuori dalla parentesi graffa chiusa quella variabile non esiste più.


Quote:
3)se invece di OSS per aprire il file provo con DST (dandogli un valore opportuno) ottengo sempre [...]
non ho capito
dst non era una stringa? il file aprilo semplicemente con l'ofstream:
Codice:
ofstream outfile("C:\\pippo.txt");
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2008, 12:59   #7
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
Quote:
Originariamente inviato da 71104 Guarda i messaggi
se l'hai dichiarato all'interno mi pare il minimo... sai cos'è uno scope? te la faccio breve, la dichiarazione di una variabile ha valore solo all'interno del blocco in cui la dichiari; appena sei fuori dalla parentesi graffa chiusa quella variabile non esiste più.
Ok, credevo che questo valesse solo per le funzioni.
Quote:
Originariamente inviato da 71104 Guarda i messaggi
non ho capito
dst non era una stringa? il file aprilo semplicemente con l'ofstream:
Codice:
ofstream outfile("C:\\pippo.txt");
Certo che è una stringa, ed è proprio per usarla come nome di file che mi serve...

Quindi o apro il file direttamente con OSS oppure devo assegnare a DST2 il valore di OSS e poi aprirlo con DST2. (No, non posso usare un nome predefinito per il file, perchè è una serie di file che devo aprire... è per questo che devo creare la stringa composta tra l'altro:

OSS << DST << I << "." << rand()%10;<< rand()%10;<< rand()%10;

I è la variabile di controllo del for e mi serve appunto per dare una sequenzialità ai nomi.
demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2008, 09:32   #8
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
Up?
demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2008, 10:17   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029


allora...

Codice:
for (int i = 0; i < N; i++)
{
	string dst = "C:\\test\\";
	ostringstream oss;
	oss << dst << i << "." << (rand() % 10 + rand() % 10 + rand() % 10);
	string name = oss.str();
	ofstream outfile(name);
	if (outfile.good())
	{
		// scrivi sul file
		// ...
	}
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2008, 22:34   #10
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
Quote:
Originariamente inviato da 71104 Guarda i messaggi


allora...

Codice:
for (int i = 0; i < N; i++)
{
	string dst = "C:\\test\\";
	ostringstream oss;
	oss << dst << i << "." << (rand() % 10 + rand() % 10 + rand() % 10);
	string name = oss.str();
	ofstream outfile(name);
	if (outfile.good())
	{
		// scrivi sul file
		// ...
	}
}
Mi da sempre l'errore

Codice:
43 D:\Documents and Settings\Nik\Documenti\C++\TUHDSS.cpp no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&)'
, esattamente come quando avevo provato io...
demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2008, 23:41   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ops, verissimo errore mio:
Codice:
for (int i = 0; i < N; i++)
{
	string dst = "C:\\test\\";
	ostringstream oss;
	oss << dst << i << "." << (rand() % 10 + rand() % 10 + rand() % 10);
	string name = oss.str();
	ofstream outfile(name.c_str());
	if (outfile.good())
	{
		// scrivi sul file
		// ...
	}
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-08-2008, 23:15   #12
demonbl@ck
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 1056
Quote:
Originariamente inviato da 71104 Guarda i messaggi
ops, verissimo errore mio:
Codice:
for (int i = 0; i < N; i++)
{
	string dst = "C:\\test\\";
	ostringstream oss;
	oss << dst << i << "." << (rand() % 10 + rand() % 10 + rand() % 10);
	string name = oss.str();
	ofstream outfile(name.c_str());
	if (outfile.good())
	{
		// scrivi sul file
		// ...
	}
}
Scusa, non ho potuto rispondere prima.

Comunque funziona perfettamente, grazie
demonbl@ck è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
Google testa Ask Google Help: l'IA di Ge...
Apple aggiorna l'elenco dei prodotti obs...
Renault 5 si aggiorna anche in Italia: p...
L’IA fa il lavoro dei junior. Ma le impr...
Google riduce gli errori quantistici di ...
Xpeng Mona L05: un SUV da 4,87 metri con...
CERN e Mistral AI insieme per il primo L...
Le analisi approfondite sullo scudo term...
Chery Q arriva in Italia: 380 km, trazio...
Rocket Lab rinvia il primo lancio di Neu...
Tutti gli astronauti della missione spaz...
Agenti IA in azienda: il difficile non &...
Anthropic, New York chiede di rinviare l...
Meta aggiorna Edits con link audio, tend...
Hitman: Absolution si prepara al debutto...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v