Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

Członek DUG


Elo.
Chce zrobić tak aby mieć w zmiennej nazwe pliku jaką ma program tworzyć lecz nie mogę do tego dojść
string filename = "ala"; ofstream file; file.open(filename); file <<"test"<< endl; file.close();
Jakieś pomysły?
Offline



Administrator




To jest cały twój program? Jaki to język? Widać, że zdefiniowałeś zmienną filename z nazwą pliku, czyli to o co pytasz. Może powiesz do czego chcesz dojść. Polecam najpierw przeczytać http://rtfm.killfile.pl/ . Bo ten post to jakaś masakra.
Offline



Smoleńsk BULWA!




Jak dobrze widzę C++? No to co za problem? Robisz np tak:
#include <iostream>
#include <string>
#include <fstream>
void zapiszPlik(std::string fileName)
{
std::ofstream file;
file.open(fileName.c_str());
file <<"test"<< std::endl;
file.close();
}
int main()
{
std::string fileName;
std::cout << "Podaj nazwe pliku" << "\n";
std::cin >> fileName;
zapiszPlik(fileName);
return 0;
}Offline

Członek DUG


Huk napisał(-a):
Jak dobrze widzę C++? No to co za problem? Robisz np tak:
Kod:
#include <iostream> #include <string> #include <fstream> void zapiszPlik(std::string fileName) { std::ofstream file; file.open(fileName.c_str()); file <<"test"<< std::endl; file.close(); } int main() { std::string fileName; std::cout << "Podaj nazwe pliku" << "\n"; std::cin >> fileName; zapiszPlik(fileName); return 0; }
Wielkie thx.
Dlaczego nie mogę zrobić tak samo z liczbą tzn zamiast string fileName dać int liczba ?
dostaje podczas kompilacji
: error: request for member ‘c_str’ in ‘name’, which is of non-class type ‘int’
pozdro
Offline



Smoleńsk BULWA!




Ehh nie żebym się czepiał czy coś - ale fakt że takie pytania zadajesz, oznacza że nie do końca rozumiesz podstawy języka - do nauki BARDZO polecam książkę "Symfonia C++", Grębosza (wersja dla C99 do znalezienia w formie pdf, gdzieś na necie) tam masz wyjaśnione wszystko step-by-step, do tego normalnym językiem ;]
Co do pytania - nie możesz dać int, float czy double - ponieważ funkcja open() wygląda tak jak to opisano tutaj:
http://www.cplusplus.com/reference/iostream/ofstream/open/
void open ( const char * filename, ios_base::openmode mode = ios_base::out );
Jak widać jako argument przyjmuje "const char *" a Ty chcesz mu tam dać int, występuje niezgodność typów, stąd kompilator ładnie wypluwa error, przy stringu się nie pluje ponieważ funkcja c_str() konwertuje nam std::string na "char *".
Edit:
Jeszcze trzeba dodać że funkcja c_str() jest tylko dostępna dla std::string, a nie dla int czy double (a przydała by się czasami) stąd dokładny błąd który otrzymujesz - ale tak czy siak, nie możesz użyć czystego int, float czy double dla funkcji open();
Ostatnio edytowany przez Huk (2010-10-23 15:45:18)
Offline

Członek DUG


No a moge dodac np do nazwy pliku liczbe ?
Offline



Smoleńsk BULWA!




Jeżeli skompilujesz kod który wcześniej podałem to możesz podać nazwę w stylu: "plik1.txt" czy "plik123972931973.txt" czy jaką tam chcesz i oczywiście zadziała.
Jeżeli chcesz połączyć nawę pliku wraz z jakąś liczbą wewnątrz programu to jest z tym więcej zachodu. "Czysty" std::string chyba nie daje żadnej możliwości dodania cyferki, ale można to zrobić np tak:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
void zapiszPlik(std::string fileName)
{
std::ofstream file;
file.open(fileName.c_str());
file <<"test"<< std::endl;
file.close();
}
int main()
{
std::string fileName;
int x=10.0f;
std::cout << "Podaj nazwe pliku" << "\n";
std::cin >> fileName;
std::stringstream ss;
ss << x;
fileName+=ss.str();
zapiszPlik(fileName);
return 0;
}Ostatnio edytowany przez Huk (2010-10-24 08:46:37)
Offline
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
void zapiszPlik(std::string fileName)
{
std::ofstream file;
file.open(fileName.c_str());
file <<"@echo ON"<< std::endl;
file <<nazwa;//tu wywala błąd
file.close();
}
int main()
{
std::string fileName="shut";
std::string nazwa ;
int x,z,y,t;
std::string e= ".txt";
std::string kroa= ".";
//std::cout << "Podaj nazwe pliku" << "\n";
//std::cin >> fileName;
for (x=1;x<=10;x++)
{
for (z=1;z<=3;z++)
{
for (y=1;y<=3;y++)
{
for (t=1;t<=3;t++)
{
std::string sIPa;
std::string sIPb;
std::string sIPc;
std::string sIPd;
std::ostringstream a;
std::ostringstream b;
std::ostringstream c;
std::ostringstream d;
a << x;
sIPa = a.str();
b << z;
sIPb = b.str();
c << y;
sIPc = c.str();
d << t;
sIPd = d.str();
nazwa = sIPa + kroa + sIPb + kroa + sIPc + kroa + sIPd;
fileName+=nazwa;
fileName+=e;
zapiszPlik(fileName);
fileName="shut";
}
}
}
}
return 0;
}chodzi tutaj o to by zmienna(nazwa) była zapisywana do pliku niestety jest z nią problem, może wiecie jak to rozwiązać
Ostatnio edytowany przez kondi06 (2011-02-05 16:19:39)
Offline



Administrator
kamikaze napisał(-a):
http://www.google.pl/search?q=c%2B%2B+zapis+do+pliku
szukałem w ten sposób i nic mi to nie dało bo według tego wszystko powinno działać
Offline



Administrator




No dobra, fakt tam nie znajdziesz rozwiązania swojego problemu. Powinieneś raczej wpisać C++ postawy lub programowanie podstawy.
void zapiszPlik(std::string fileName)
{
std::ofstream file;
file.open(fileName.c_str());
file <<"@echo ON"<< std::endl;
file <<nazwa;//tu wywala błąd
file.close();
}Tu masz problem, wywala błąd. Powinieneś go przeczytać, jeśli go nie rozumiesz wkleić. No ale bez tego widać co jest źle. Funkcja zapiszPlik nic nie wie o zmiennej nazwa. Zmienna nazwa jest zdefiniowana w funkcji main. Jeśli chcesz jej użyć w tej funkcji musisz ją przekazać w argumencie lub zdefiniować ją jako globalną na początku po dyrektywach #include .
Offline
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
void zapiszPlik(std::string fileName)
{
//std::ofstream file;
//file.open(fileName.c_str());
//file <<"@echo ON"<< std::endl;
//file <<nazwa;
// file.close();
}
int main()
{
std::string fileName="shut";
std::string nazwa ;
int x,z,y,t;
std::string e= ".txt";
std::string kroa= ".";
//std::cout << "Podaj nazwe pliku" << "\n";
//std::cin >> fileName;
for (x=1;x<=2;x++)
{
for (z=1;z<=2;z++)
{
for (y=1;y<=2;y++)
{
for (t=1;t<=2;t++)
{
std::string sIPa;
std::string sIPb;
std::string sIPc;
std::string sIPd;
std::ostringstream a;
std::ostringstream b;
std::ostringstream c;
std::ostringstream d;
a << x;
sIPa = a.str();
b << z;
sIPb = b.str();
c << y;
sIPc = c.str();
d << t;
sIPd = d.str();
nazwa = sIPa + kroa + sIPb + kroa + sIPc + kroa + sIPd;
fileName+=nazwa;
fileName+=e;
// zapiszPlik(fileName);
std::ofstream file;
file.open(fileName.c_str());
file <<"@echo ON"<< std::endl;
file <<nazwa <<std::endl;
file >> wbc;
file.close();
fileName="shut";
}
}
}
}
return 0;
}poprawiłem działa lecz zmienna(nazwa) nie jest wpisywana do pliku, co może być źle
Ostatnio edytowany przez kondi06 (2011-02-05 17:24:27)
Offline



Administrator




Poprawiaj dalej, to się nawet nie kompiluje.
Offline

Członek DUG


http://pl.wikibooks.org/wiki/C++
większość kodu jest zupełnie nie potrzebna
rady:
-czytaj komunikaty błędów
-używaj 'using namespace std;' -- nie bedziesz musiał za każdym razem pisać std::
Offline
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
void zapiszPlik(std::string fileName)
{
//std::ofstream file;
//file.open(fileName.c_str());
//file <<"@echo ON"<< std::endl;
//file <<nazwa;
// file.close();
}
int main()
{
std::string fileName="shut";
std::string nazwa ;
std::string wbc ;
int x,z,y,t;
std::string e= ".txt";
std::string kroa= ".";
//std::cout << "Podaj nazwe pliku" << "\n";
//std::cin >> fileName;
for (x=1;x<=2;x++)
{
for (z=1;z<=2;z++)
{
for (y=1;y<=2;y++)
{
for (t=1;t<=2;t++)
{
std::string sIPa;
std::string sIPb;
std::string sIPc;
std::string sIPd;
std::ostringstream a;
std::ostringstream b;
std::ostringstream c;
std::ostringstream d;
a << x;
sIPa = a.str();
b << z;
sIPb = b.str();
c << y;
sIPc = c.str();
d << t;
sIPd = d.str();
nazwa = sIPa + kroa + sIPb + kroa + sIPc + kroa + sIPd;
fileName+=nazwa;
fileName+=e;
// zapiszPlik(fileName);
std::ofstream file;
file.open(fileName.c_str());
file <<"@echo ON"<< std::endl;
file << nazwa <<std::endl;// tu jest strumień danych który nie działa
file.close();
fileName="shut";
}
}
}
}
return 0;
}mnie to kompiluje tylko zmienna(nazwa) nie jest dostarczona do pliku..
a co do "using namespace std" to nie za bardzo wiem jak tego użyć..jeżeli już potrzebuje wdrążyć zmienną do pliku ...
Ostatnio edytowany przez kondi06 (2011-02-05 20:10:40)
Offline

Użytkownik


Co do nazwy będącej liczbą to polecam:
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
void zapiszPlik(const char* fileName)
{
std::ofstream file;
file.open(fileName);
file <<"test"<< std::endl;
file.close();
}
int main()
{
int intin;
std::cout << "Podaj nazwe pliku" << "\n";
std::cin >> intin;
char buf[100];
sprintf(buf, "%d", intin);
zapiszPlik(buf);
return 0;
}Ciut prostsze niż Huk'a ;)
Offline
nie chodzi o nazwę tylko o zapisywanie zmiennej nazwa do pliku..strumień nie działa,i tyle
Offline



Administrator




No teraz tak bo dałeś nową wersję, poprzednia się nie kompiluje. Na podstawie czego wnioskujesz że zmienna nazwa nie jest zapisywana? U mnie to odpalam i się zapisuje.
Offline
możesz dać screena , ja to odpalam i po otwarciu pliku w którym powinno być napisane:
@echo on
x.z.y.t
jest tylko:
@echo on
zmienna nazwa jest to składanka stringów i liczb fora prze konwertowanych na string..
tak dla jasności x,z,y,t są to dowolne liczby i w każdym pliku są inne..
Ostatnio edytowany przez kondi06 (2011-02-05 20:23:29)
Offline



Administrator




Ja mam w plikach:
@echo ON
1.1.1.1
@echo ON
1.1.1.2
itd.
Offline



Administrator




g++ (GCC) 4.1.2
Ostatnio edytowany przez kamikaze (2011-02-05 20:31:32)
Offline
ja przed chwilą zainstalowałem c++bulider i działa poprawnie a w dev c++ ,niestety nie...no cóż myślałem że to ja popełniam błąd..dzięki za pomoc
Offline



Nadworny matematyk




Nie wiem czy to znacie ale w linuxie można się pobawić strumieniami z bash'a wiec odpala sie tak:
cat in.txt |./a.out > out.txt
Wygodne i przyjemne a w *.cpp pisze się normalnie cout i cin.
Polecam :)
Ostatnio edytowany przez P@blo (2011-02-06 21:36:06)
Offline