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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2010-10-19 21:12:19

  xomrk - Członek DUG

xomrk
Członek DUG
Zarejestrowany: 2010-03-21

C++: Tworzenie pliku

Elo.

Chce zrobić tak aby mieć w zmiennej nazwe pliku jaką ma program tworzyć lecz nie mogę do tego dojść

Kod:

string filename = "ala";

ofstream file;
file.open(filename);
file <<"test"<< endl; 
file.close();

Jakieś pomysły?


Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

Offline

 

#2  2010-10-19 21:52:36

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: C++: Tworzenie pliku

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

 

#3  2010-10-19 22:33:24

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: C++: Tworzenie pliku

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;
}

Offline

 

#4  2010-10-23 13:25:00

  xomrk - Członek DUG

xomrk
Członek DUG
Zarejestrowany: 2010-03-21

Re: C++: Tworzenie pliku

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

Kod:

: error: request for member ‘c_str’ in ‘name’, which is of non-class type ‘int’

pozdro


Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

Offline

 

#5  2010-10-23 14:48:03

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: C++: Tworzenie pliku

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/

Kod:

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

 

#6  2010-10-23 17:36:20

  xomrk - Członek DUG

xomrk
Członek DUG
Zarejestrowany: 2010-03-21

Re: C++: Tworzenie pliku

No a moge dodac np do nazwy pliku liczbe ?


Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

Offline

 

#7  2010-10-24 08:45:08

  Huk - Smoleńsk BULWA!

Huk
Smoleńsk BULWA!
Zarejestrowany: 2006-11-08

Re: C++: Tworzenie pliku

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:

Kod:

#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

 

#8  2011-02-05 16:17:47

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

Kod:

#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

 

#9  2011-02-05 16:29:14

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Offline

 

#10  2011-02-05 16:48:12

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

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

 

#11  2011-02-05 17:01:32

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: C++: Tworzenie pliku

No dobra, fakt tam nie znajdziesz rozwiązania swojego problemu. Powinieneś raczej wpisać C++ postawy lub programowanie podstawy.

Kod:

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

 

#12  2011-02-05 17:24:03

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

Kod:

#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

 

#13  2011-02-05 19:24:13

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: C++: Tworzenie pliku

Poprawiaj dalej, to się nawet nie kompiluje.

Offline

 

#14  2011-02-05 19:34:41

  ZiomekPL - Członek DUG

ZiomekPL
Członek DUG
Zarejestrowany: 2009-12-18

Re: C++: Tworzenie pliku

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::


Gentoo! user

Offline

 

#15  2011-02-05 20:05:37

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

Kod:

#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

 

#16  2011-02-05 20:09:59

  Miziak - Użytkownik

Miziak
Użytkownik
Skąd: ok. Płocka
Zarejestrowany: 2010-11-03

Re: C++: Tworzenie pliku

Co do nazwy będącej liczbą to polecam:

Kod:

#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 ;)


http://img827.imageshack.us/img827/778/linuxfr8.gif

Offline

 

#17  2011-02-05 20:13:09

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

nie chodzi o nazwę tylko o zapisywanie zmiennej nazwa do pliku..strumień nie działa,i tyle

Offline

 

#18  2011-02-05 20:13:14

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: C++: Tworzenie pliku

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

 

#19  2011-02-05 20:22:38

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

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

 

#20  2011-02-05 20:24:37

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: C++: Tworzenie pliku

Ja mam w plikach:

@echo ON
1.1.1.1

@echo ON
1.1.1.2

itd.

Offline

 

#21  2011-02-05 20:25:12

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

a w czym kompilujesz

Offline

 

#22  2011-02-05 20:30:52

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: C++: Tworzenie pliku

g++ (GCC) 4.1.2

Ostatnio edytowany przez kamikaze (2011-02-05 20:31:32)

Offline

 

#23  2011-02-05 20:33:46

  kondi06 - Użytkownik

kondi06
Użytkownik
Zarejestrowany: 2011-02-05

Re: C++: Tworzenie pliku

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

 

#24  2011-02-06 21:19:52

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: C++: Tworzenie pliku

Nie wiem czy to znacie ale w linuxie można się pobawić strumieniami z bash'a wiec odpala sie tak:

Kod:

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)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)