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

błąd w funkcji ifstream

Object Storage Arubacloud
0 głosów
160 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez Artur313 Użytkownik (790 p.)
edycja 10 stycznia 2018 przez Patrycjerz

witam Próbuje napisać program który wczyta pytanie o który wylosuje i wczyta losowe pytanie z przedziału od 1 do 20 konwersja int'a na string'a działa dobrze ale przy próbie otwarcia pliku program napotyka błąd 

kod wygląda tak : 



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


using namespace std;

int main()
{
    srand(time(NULL));

int L= rand()%20+1;
string numer;
stringstream strumien;
strumien<<L;
strumien >>numer;
string  napis = "pytanie"+numer+".txt";

    ifstream plik;
    plik.open(napis);
    if(plik)
    {
        string linia;
        while(getline(plik,linia))
        {
            cout<<linia;
        }

    }
    else
    {
        cout <<"wystapil blad nie mozna otworzyc pliku";
    }
    plik.close();
    return 0;
}

nie wiem czemu tak jest ? 

 

1 odpowiedź

0 głosów
odpowiedź 10 stycznia 2018 przez Artur313 Użytkownik (790 p.)
edycja 10 stycznia 2018 przez Artur313

już rozwiązałem problem zamiast

 plik.open(napis);

trzeba było dać 

plik.open(napis.c_str());

a czy mógłby mi ktoś dokładniej wyjaśnić jak działa c_str()? bo zastosowałem to i działa ale chciałbym to zrozumieć  

PS. mam jeszcze jedno pytanie czy da się zrobić tak aby pliki z pytaniami były umieszczone w osobny folderze umieszczonym w folderze z projektem i z tamtąd je odczytywać ?

komentarz 10 stycznia 2018 przez 10kw10 Pasjonat (22,880 p.)
komentarz 10 stycznia 2018 przez Patrycjerz Mędrzec (192,320 p.)
Metoda c_str zwraca reprezentację zawartości stringa w postaci wskaźnika na tablicę char.

Nazwa pliku w postaci stringa nie działa ci z powodu przestarzałego kompilatora. Obsługa takowego parametru została wprowadzona od standardu C++11. Inaczej trzeba się posiłkować zwykłym łańcuchem znaków.

Jeśli chcesz otwierać pliki z innego folderu, to możesz doprecyzować ścieżkę pliku o nazwy katalogów, np.: "folder/plik.txt" lub "folder\\plik.txt", jeśli używasz Windowsa.

Podobne pytania

0 głosów
0 odpowiedzi 416 wizyt
pytanie zadane 29 listopada 2020 w C i C++ przez kiuyama Nowicjusz (190 p.)
0 głosów
1 odpowiedź 181 wizyt
pytanie zadane 11 marca 2017 w C i C++ przez Meltern Początkujący (440 p.)
+1 głos
2 odpowiedzi 132 wizyt
pytanie zadane 29 stycznia 2017 w C i C++ przez czujek22 Dyskutant (7,670 p.)

92,539 zapytań

141,382 odpowiedzi

319,478 komentarzy

61,928 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!

...