• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - Funkcja przypisująca wartość z pliku do zmiennej z użyciem biblioteki fstream

Object Storage Arubacloud
0 głosów
308 wizyt
pytanie zadane 23 marca 2019 w C i C++ przez Milo Obywatel (1,180 p.)

Hej, jestem ciekaw, czy da się napisać następującą funkcje.

#include <fstream>

//…

void wczytajZmienna (string nazwaPliku, string nazwaZmiennej)
{
    // ...
}

int main ()
{
    int x;
    wczytajZmienna ("x.txt", "x");
    //...
}

Czy mogę w ogóle przekazać funkcji nazwę zmiennej, czy muszę dać jej adres tej zmiennej?

Jeszcze jedna rzecz mnie ciekawi. Środowisko mi podpowiada, gdy chcę uzupełnić argumenty podczas otwierania pliku (.open()), wyskakuje mi coś takiego:

public void basic_fstream::open (cosnt std::string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out)

Przed nazwą pliku jest napisane "const", czyli ta wartość jest stała, więc nie może być zmienną. Dobrze rozumiem?

1 odpowiedź

+1 głos
odpowiedź 23 marca 2019 przez j23 Mędrzec (194,920 p.)
wybrane 23 marca 2019 przez Milo
 
Najlepsza
  1. W największym skrócie: musisz podać adres lub referencję do zmiennej, albo niech funkcja zwraca po prostu wartość, którą sobie przypiszesz do zmiennej.
  2. nie, const & oznacza, że ta zmienna nie będzie modyfikowana przez funkcję open.
komentarz 23 marca 2019 przez Milo Obywatel (1,180 p.)
A istnieje możliwość, aby ta funkcja dostawała nazwę zmiennej i działała poprawnie?
komentarz 23 marca 2019 przez j23 Mędrzec (194,920 p.)
Możliwość jest, ale to totalnie przerost formy nad treścią.
komentarz 24 marca 2019 przez Milo Obywatel (1,180 p.)

Znalazłem sposób:

#include <fstream>

int main ()
{
    string nazwaPliku = "x.txt";
    fstream plik;
    plik.open (nazwaPliku.c_str(), ios::in | ios::out);

    // ...

    plik.close ();
}

Przeczytałem, że dzieje się tak, bo niektóre funkcje nie przyjmują standardowego string'a, ale c-string'a.

https://stackoverflow.com/questions/1662624/c-ifstream-open-problem-with-passing-a-string-for-text-file-name

komentarz 25 marca 2019 przez j23 Mędrzec (194,920 p.)

std::fstream::open przyjmuje std::stringa, ale od standardu C++11. Współczesne kompilatory nie powinny mieć z tym problemu. Nie wiem, w czym kompilujesz, ale jeśli w MinGW/g++, ustaw standard przynajmniej -std-c++14. A jeśli w czymś innym, co nie obsługuje C++11/14/17, odinstaluj to i zainstaluj coś nowego.

Podobne pytania

0 głosów
2 odpowiedzi 1,775 wizyt
pytanie zadane 2 grudnia 2016 w C i C++ przez Riddick Bywalec (2,600 p.)
0 głosów
2 odpowiedzi 1,039 wizyt
0 głosów
1 odpowiedź 285 wizyt
pytanie zadane 13 lutego 2020 w C i C++ przez Damianek Obywatel (1,020 p.)

92,555 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...