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

question-closed Problem z otrwarciem pliku tekstowego (Obiektowy C++ odc. 2: Struktura projektu obiektowego )

Object Storage Arubacloud
0 głosów
396 wizyt
pytanie zadane 9 kwietnia 2016 w C i C++ przez danior Początkujący (330 p.)
zamknięte 10 kwietnia 2016 przez danior

Witam, po napisaniu kodu z drugiego odcinka serii obiektowy C++, przy próbie odpalenia programu wypisuje tylko komunikat mówiący : "nie udalo sie otworzyc pliku!". Czyli komunikat, który ma być wyświetlony w momencie problemu z otwarciem pliku. Plik quiz.txt jest w folderze z projektem, problem występuje zarówno w Code::Blocksie jak i w Visual Studio. Wrzucam tylko problematyczną część kodu bez reszty funkcji. Proszę o pomoc i pozdrawiam, danior.

 

 

#include<iostream>
#include "pytanie.h"
#include <cstdlib>
#include<fstream>
#include<string>
using namespace std;

void Pytanie::wczytaj()
{
    fstream plik;
    plik.open("quiz.txt",ios::in);

    if (plik.good()==false)
    {
        cout<<"nie udalo sie otworzyc pliku!"<<endl;
		cin.get();
		exit(0);
    }
	
    int nr_lini=(nr_pytania-1)*6+1;
    int aktualny_nr=1;
    string linia;

    while(getline(plik,linia))
    {
        if(aktualny_nr==nr_lini) tresc=linia;
        if(aktualny_nr==nr_lini+1) a=linia;
        if(aktualny_nr==nr_lini+2) b=linia;
        if(aktualny_nr==nr_lini+3) c=linia;
        if(aktualny_nr==nr_lini+4) d=linia;
        if(aktualny_nr==nr_lini+5) poprawna=linia;
        aktualny_nr++;
    }
    plik.close();
}

 

komentarz zamknięcia: otrzymałem satysfakcjonującą odpowiedź

2 odpowiedzi

+1 głos
odpowiedź 9 kwietnia 2016 przez niezalogowany
wybrane 9 kwietnia 2016 przez danior
 
Najlepsza
Otwierasz plik z poziomu IDE czy z folderu bin?
komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)
próbowałem zarówno z poziomu IDE jak i z folderu debug oraz z release
komentarz 9 kwietnia 2016 przez niezalogowany
Zamiast ścieżki względnej użyj bezwzględnej
komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)
Przy ścieżce bezwzględnej dalej to samo. O dziwo raz uruchomiło się poprawnie i wczytało treść 1. pytania, po czym zamknąłem konsole, uruchomiłem raz jeszcze i w dalszym ciągu nie czyta pliku.
komentarz 9 kwietnia 2016 przez niezalogowany

Zamiast:

plik.open("quiz.txt",ios::in);

daj:

plik.open("c:\test.txt",ios::in);

i sprawdź czy utworzy ci na dysku c plik test

komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)
po skopiowaniu pliku quiz na dysk C dalej to samo, nowego pliku nie mogę stworzyć na C
komentarz 9 kwietnia 2016 przez niezalogowany
Miałeś nie kopiować tego quiz na c tylko po prostu zamienić linijkę o której ci mówiłem i sprawdzić czy utworzy ci plik
komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)
Sorry, źle przeczytałem, nie tworzy tego pliku btw.
komentarz 9 kwietnia 2016 przez niezalogowany
Spróbuj jeszcze raz bezwzględnej ścieżki ale zamiast "\" użyj "/"
komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)
Pomogło, dzięki. Jakiś pomysł czym to było spowodowane ? Na przyszłość zawsze używać / ? Mogę dać jakiegoś plusa czy coś za pomoc ?
komentarz 9 kwietnia 2016 przez niezalogowany
Zapomniałem że backslash + na przykład litera t tworzą sekwencje ucieczki podczas gdy slashe już nie.
0 głosów
odpowiedź 9 kwietnia 2016 przez Sedi Stary wyjadacz (10,200 p.)
Jesteś na 100% pewien, że masz ten plik w tym akurat katalogu ? Upewnij się.

Jeśli to nie zadziała, upewnij się, że masz włączone rozszerzenia plików, jeśli używasz Windowsa.
komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)

Wydaję mi się, że tak, dla pewności wrzucam screenyPozdrawiam, danior

komentarz 9 kwietnia 2016 przez Sedi Stary wyjadacz (10,200 p.)
Czyli tak jak myślałem, masz błąd gdzieś w przekierowaniu :( - Wiem, że to trochę czasu zajmie, ale "show me the code" :>
komentarz 9 kwietnia 2016 przez danior Początkujący (330 p.)
main.cpp

#include <iostream>
#include "pytanie.h"
#include<string>

using namespace std;

int main()
{
   Pytanie p[5];
   int suma=0;
   for(int i=0; i<=4; i++)
   {
       p[i].nr_pytania=i+1;
       p[i].wczytaj();
       p[i].wypisz();
       p[i].sprawdz();
       suma+=p[i].punkt;
   }


   cout<<"zdobyles: "<<suma<<" punktow";
    return 0;
}

 

 

pytanie.cpp

 

 

#include <iostream>
#include <fstream>
#include "pytanie.h"
#include <cstdlib>
#include<string>

using namespace std;

void Pytanie::wczytaj()
{
    fstream plik;
    plik.open("quiz.txt", ios::in);

    if (plik.good()==false)
    {
        cout<<"nie udalo sie otworzyc pliku!";
        exit(0);
    }

    int nr_lini=(nr_pytania-1)*6+1;
    int aktualny_nr=1;
    string linia;

    while(getline(plik,linia))
    {
        if(aktualny_nr==nr_lini) tresc=linia;
        if(aktualny_nr==nr_lini+1) a=linia;
        if(aktualny_nr==nr_lini+2) b=linia;
        if(aktualny_nr==nr_lini+3) c=linia;
        if(aktualny_nr==nr_lini+4) d=linia;
        if(aktualny_nr==nr_lini+5) poprawna=linia;
        aktualny_nr++;
    }
    plik.close();
}

void Pytanie::wypisz()
{
    cout<<"Pytanie nr. "<<nr_pytania<<endl;
    cout<<tresc<<endl;
    cout<<"a. "<<a<<endl;
    cout<<"b. "<<b<<endl;
    cout<<"c. "<<c<<endl;
    cout<<"d. "<<d<<endl;

    cout<<endl<<"podaj swoja odpowiedz: "<<endl;
    cin>>odpowiedz;
}

void Pytanie::sprawdz()
{
    if(odpowiedz==poprawna)
    {
         cout<<"twoja odpowiedz jest poprawna"<<endl;
         punkt=1;
    }
    else punkt=0;

}



pytanie.h



#include <iostream>
#include<string>

using namespace std;

class Pytanie
{
public:

    int nr_pytania;
    string tresc;
    string a,b,c,d;
    string poprawna;
    string odpowiedz;
    int punkt;

    void wczytaj();         // wczytuje z pliku
    void wypisz();          // wypisuje na ekran pytanie i odpowiedzi oraz pyta o odpowiedz
    void sprawdz();         // sprawdza czy uzytkownik odpowiedzial dobrze
};

 

Podobne pytania

0 głosów
1 odpowiedź 315 wizyt
0 głosów
0 odpowiedzi 317 wizyt
pytanie zadane 18 lutego 2017 w C i C++ przez delta_pavonis Początkujący (300 p.)
0 głosów
1 odpowiedź 214 wizyt
pytanie zadane 14 kwietnia 2016 w C i C++ przez fdse2 Nowicjusz (200 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

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

...