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

Youtube c++ odcinek 7

Object Storage Arubacloud
0 głosów
522 wizyt
pytanie zadane 5 grudnia 2019 w C i C++ przez Apage Nowicjusz (140 p.)
edycja 5 grudnia 2019 przez Apage

Czy mógłby mi któs pomó sprawdzając mój kod? szukam linia po linii bledu ale nic nie widze

konsola pokazuje tylko i wylacznie odp a,b,c,d ale nie co sie w nich znajduje i nie pokazuje tresci

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

string temat,nick;
string pytania[5];
string odpa[5],odpb[5],odpc[5],odpd[5];
string poprawna[5];
string odpowiedz;
int punkty=0;

int main()
{
    int nr_linii=1;
    string linia;
    int nr_pytania=0;

    fstream plik;

    plik.open("quiz.txt", ios::in);
    if(plik.good()==false)
    {
        cout<<"Taki plik nie istnieje";
        exit(0);
    }
    while(getline(plik,linia));
          {
              switch(nr_linii)
              {
                  case 1:temat = linia;                break;
                  case 2:nick= linia;                  break;
                  case 3: pytania[nr_pytania]= linia;  break;
                  case 4: odpa[nr_pytania]= linia;     break;
                  case 5: odpb[nr_pytania]= linia;     break;
                  case 6: odpc[nr_pytania]= linia;     break;
                  case 7: odpd[nr_pytania]= linia;     break;
                  case 8: poprawna[nr_pytania]= linia; break;

              }
              if(nr_linii==8) {nr_linii=2;nr_pytania++;}
              nr_linii++;
          }
          plik.close();

          for(int i=0;i<=4;i++)
          {
              cout<<pytania[i]<<endl;
              cout<<"A."<<odpa[i]<<endl;
              cout<<"B."<<odpb[i]<<endl;
              cout<<"C."<<odpc[i]<<endl;
              cout<<"D."<<odpd[i]<<endl;

              cout<<"Twoja odpowiedz:";
              cin>>odpowiedz;



              transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(), ::tolower);

              if(odpowiedz==poprawna[i])
              {
                  cout<<"Zdobywasz punkt!";

                punkty++;
              }
              else
              {
                  cout<<"Zla odpowiedz! poprawna odpowiedz to: "<<poprawna[i]<<endl;
              }

          }

          cout<<endl<<"koniec quizu! Zdobyte punkty: "<<punkty;
    return 0;
}

 

komentarz 5 grudnia 2019 przez tkz Nałogowiec (42,000 p.)
Kod się nie kompiluje. Linia 30. w if'ie masz zmienna, która nigdzie wcześniej nie została zdeklarowana.
komentarz 5 grudnia 2019 przez j23 Mędrzec (194,920 p.)

Po co ten if w linii 29?

komentarz 5 grudnia 2019 przez Apage Nowicjusz (140 p.)

@tkz, Usunalem tego ifa rzeczywiscie nie wiem jak sie tam znalazl

ale to nadal nie naprawia problemu

1 odpowiedź

0 głosów
odpowiedź 5 grudnia 2019 przez j23 Mędrzec (194,920 p.)

if(plik.good()==false)

Ten warunek nie da Ci gwarancji, że strumień jest otwarty. Zamiast good() powinno być tam is_open().

Zapewne aplikacja nie otwiera pliku z pytaniami i dlatego wyświetla tylko a. b. c. d.

komentarz 5 grudnia 2019 przez Apage Nowicjusz (140 p.)
Zamienilem zeby sprawdzic lecz niestety nadal bez zmian
komentarz 5 grudnia 2019 przez j23 Mędrzec (194,920 p.)
I co, nie masz komunikatu, że plik nie istnieje?
komentarz 5 grudnia 2019 przez Apage Nowicjusz (140 p.)
Nie
komentarz 5 grudnia 2019 przez j23 Mędrzec (194,920 p.)
Pokaż kod po poprawce.

Jaki system?
komentarz 5 grudnia 2019 przez Apage Nowicjusz (140 p.)

windows 10

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>

using namespace std;

string temat,nick;
string tresc[5];
string odpa[5],odpb[5],odpc[5],odpd[5];
string poprawna[5];
string odpowiedz;
int punkty=0;

int main()
{
    int nr_linii=1;
    string linia;
    int nr_pytania=0;

    fstream plik;

    plik.open("pytania.txt", ios::in);
    if(plik.is_open()==false)
    {
        cout<<"Taki plik nie istnieje";
        exit(0);
    }
    while(getline(plik,linia));
          {
              switch(nr_linii)
              {
                  case 1: temat = linia;                break;
                  case 2: nick= linia;                  break;
                  case 3: tresc[nr_pytania]= linia;     break;
                  case 4: odpa[nr_pytania]= linia;      break;
                  case 5: odpb[nr_pytania]= linia;      break;
                  case 6: odpc[nr_pytania]= linia;      break;
                  case 7: odpd[nr_pytania]= linia;      break;
                  case 8: poprawna[nr_pytania]= linia;  break;

              }

              if(nr_linii==8) {nr_linii=2;nr_pytania++;}
              nr_linii++;
          }
          plik.close();

          for(int i=0;i<=4;i++)
          {
              cout<<tresc[i]<<endl;
              cout<<"A."<<odpa[i]<<endl;
              cout<<"B."<<odpb[i]<<endl;
              cout<<"C."<<odpc[i]<<endl;
              cout<<"D."<<odpd[i]<<endl;


              cout<<"Twoja odpowiedz:";
              cin>>odpowiedz;


              transform(odpowiedz.begin(),odpowiedz.end(),odpowiedz.begin(), ::tolower);

              if(odpowiedz==poprawna[i])
              {
                  cout<<"Zdobywasz punkt!";
                punkty++;
              }
              else
              {
                  cout<<"Zla odpowiedz! poprawna odpowiedz to: "<<poprawna[i]<<endl;
              }

          }


          cout<<endl<<"Koniec quizu! Zdobyte punkty: "<<punkty;
    return 0;
}

 

komentarz 5 grudnia 2019 przez j23 Mędrzec (194,920 p.)
Średnik w linii 30.
komentarz 5 grudnia 2019 przez Apage Nowicjusz (140 p.)
O boze dziala ajj... taki glupi blad az wstyd ale dzieki !
komentarz 6 grudnia 2019 przez j23 Mędrzec (194,920 p.)

Przenieś też definicje zmiennych z linii 9..14 do wnętrza funkcji main, bo nie wiedzieć czemu autor zrobił je globalne (a to do dobrych praktyk nie należy).

 

W sumie kompilator powinien Cię ostrzec przed tym średnikiem. Czytałeś logi kompilacji?

komentarz 6 grudnia 2019 przez tkz Nałogowiec (42,000 p.)
Nie ostrzega przed średnikiem, przynajmniej w tym miejscu, chyba myśli, że wiesz co robisz. Chyba, że są jakieś flagi w gcc do tego typu.
komentarz 6 grudnia 2019 przez j23 Mędrzec (194,920 p.)

gcc z flagą -Wall:

main.cpp: In function ‘int main()’:
main.cpp:38:5: warning: this ‘while’ clause does not guard... [-Wmisleading-indentation]
     while(getline(plik,linia));
     ^~~~~
main.cpp:39:11: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘while’
           {
           ^

Podobne pytania

0 głosów
0 odpowiedzi 255 wizyt
pytanie zadane 8 sierpnia 2018 w C i C++ przez sirwolfgur Nowicjusz (120 p.)
0 głosów
1 odpowiedź 261 wizyt
+4 głosów
2 odpowiedzi 490 wizyt

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

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

...