PDA

Visualizza la versione completa : C++ fstream nome con variabile ç_ç


E3ddy
28-05-2010, 20:17
Ciao rega.. avrei bisogno di una manina.. non ci capisco più na mazza..

sopratutto con le mie smanie da dev.. che però litiga con visual.. insomma a volte funziona uno e altre funziona l'altro xD

cmq il problema è che vorrei dare un nome che ogni volta che crea il file con la libreria fstream cambi.. indi per semplificarmi un po la vita.. mi basterebbe per ora solo inserire il nome.. poi per il resto ci penso io.. xD

il mio tentativo xD:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char x[20];

cout << " immetti nome file " << endl;
cin >> x;
x = x + ".doc";
ofstream file(x.c_str(),ios_base::app);

file << "nome file" << endl;
file << x << endl;
file.close();
}

tentativo n. 2 xD:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char x[20];
ofstream file;
cout << " immetti nome file " << endl;
cin >> x;

file.open(x+".doc",ios_base::app);
file << "nome del programma" << endl;
file << x << endl;
file.close();
}

errore in entrambe è il + che non po sta ne di qua ne di la, mi dice che non si po mette due puntatori etc...

come posso fare?

o ridotto di molto il codice.. se no vi intasavo e incasinavo nella lettura ^^

vi ringrazio in anticipo

Dario

oregon
28-05-2010, 20:19
Originariamente inviato da E3ddy
sopratutto con le mie smanie da dev.. che però litiga con visual.. insomma a volte funziona uno e altre funziona l'altro xD

Il Dev è molto vecchio ... lascialo stare.



#include <string>

...

string x;

...

cin >> x;
x = x + ".doc";
ofstream file(x.c_str(),ios_base::app);

E3ddy
28-05-2010, 21:30
nah non fa a caso mio.. purtroppo.. come già detto devo creare la variabine allinterno del nome che carichi es.:

x=1

if x<=x

x++

ecco che purtroppo string conta apparte il bit prende solo come char,

quindi il char 1 non può essere addizionato a +1

altre soluzioni? ç_ç

tentativo

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{



int y;
y = 1;


string x;
x = "fattura ";
x = x + y + ".doc";
ofstream file(x.c_str(),ios_base::app);
file << "nome del programma" << endl;
file << x << endl;
file.close();

}

grazie per la risposta cmq ^^

spero mi aiuterai a risolvere sto inghippo..

ciau

oregon
28-05-2010, 22:49
Tutto questo



x=1

if x<=x

x++

ecco che purtroppo string conta apparte il bit prende solo come char,

quindi il char 1 non può essere addizionato a +1

non ha senso ... (o io non riesco a tradurlo in una lingua comprensibile ... :)

Puoi fare nuovamente la tua richiesta spiegando il problema con una frase di senso compiuto?

E3ddy
28-05-2010, 23:11
Originariamente inviato da oregon
Tutto questo



non ha senso ... (o io non riesco a tradurlo in una lingua comprensibile ... :)

Puoi fare nuovamente la tua richiesta spiegando il problema con una frase di senso compiuto?

loooooooooooool

mmm allora ricominciamo..

io vorrei che x stia per una variabile d'itero

tipo int x = 1;

in modo da creare un ciclo for che addizioni a x (che corrisponde ad "uno") un +1 in modo da farlo diventare 2 e cosi via fino a quando non trova il numero del file da creare.. cioè se ha già creato 30 file.. di nome rispettivamente uguale al primo file il numero 1 alla secondo il 2 e cosi via fino a 30

cosi che darà il nome 31 al file che sta creando..

il comando string conta solo caratteri ASCII quindi 1+1 non lo riesce a fare ma al massimo fa 1+1= 11 e non 2

spero di essermi spiegato ^^

oregon
28-05-2010, 23:19
Originariamente inviato da E3ddy
spero di essermi spiegato ^^

Diciamo che intuito il problema ... di cui non avevi parlato nel primo post ...

Forse questo suggerimento ti puo' essere utile ...



#include <sstream>
#include <string>

...

stringstream ss;
string x;
int y;

x = "fattura";
y = 1;

ss << x << y << ".doc";

ofstream file(ss.str(), ios_base::app);

E3ddy
29-05-2010, 15:09
Originariamente inviato da oregon
Diciamo che intuito il problema ... di cui non avevi parlato nel primo post ...

Forse questo suggerimento ti puo' essere utile ...



#include <sstream>
#include <string>

...

stringstream ss;
string x;
int y;

x = "fattura";
y = 1;

ss << x << y << ".doc";

ofstream file(ss.str(), ios_base::app);


credo di esserci riuscito ^^

grazie cmq la soluzione è (per chi un giorno seguirà questa discusione per motivazioni sue ^^):



#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;
int main()
{

cout << "Vuoi creare una fattura? premi invio, ora o mai piu'" << endl;
system("PAUSE");
for ( int y = 0 ; y <= y ; y++)
{

stringstream ss;
string x;

ss << "Fattura " << y << ".doc";
x = ss.str();


ofstream file(x.c_str(),ios_base::app);
file << "nome del programma" << endl;
file << x << endl;
file.close();



cout << "File creato!, Clicca per crearne un'altro... xD" << endl;
system("PAUSE");

}



system("PAUSE");
return (0);
}



grazie ancora ^^

oregon
29-05-2010, 15:15
No ...

Questa

for ( int y = 0 ; y <= y ; y++)

non ha senso ...

E3ddy
29-05-2010, 15:31
Originariamente inviato da oregon
No ...

Questa

for ( int y = 0 ; y <= y ; y++)

non ha senso ...

?? non ha senso?

cioè? la variabile viene aumentata di volta in volta in automatico.. senza che io gli devo assegnare un numero manualmente ^^

l'unico problema che ho riscontrato è che se riavvio il programma.. devo fare il ciclo tante volte per quante fatture ha già creato..

cioè non mi crea la fattura ma mi sovrascive la numero 0 - 1 - 2 etc.. m fino a quando non arriva alla fattura che non'è stata ancora creata.. ma li basterà modificare la parte che y viene settata a zero..

che non'è idea ora.. ma ci posso perdere tranquillamente 10 minuti che forse risolvo ^^

oregon
29-05-2010, 15:54
Scusa se te lo dico ma tu non hai molta esperienza di programmazione, non solo per il C, ma in generale ...

Un ciclo for non puoi scriverlo in quel modo, perchè vuol dire che non l'hai mai affrontato nello studio. Una espressione logica del tipo

y<=y

è sempre vera e non ha senso inserirla come condizione di fine di un ciclo for perchè questo non finirà mai.

Per quanto riguarda l'altro problema che hai lamentato, ovviamente dipende dal fatto che la variabile riparte dal valore zero ogni volta che inizia il programma, dato che hai scritto

y=0

Per farla partire dall'ultimo valore usato, dovresti scrivere tale valore su disco (in un file) prima di terminare il programma e rileggerlo quando lo fai ripartire.

Loading