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

Proste pytanie odnosnie C++

Object Storage Arubacloud
0 głosów
688 wizyt
pytanie zadane 12 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

Witam z uśmiechem każdego zainteresowanego niesieniem pomocy,

otóż mam pytanie, dlaczego deklarując int nr_linii = (nr_pytania-1)*6+1; to w późniejszym IF'ie - if(aktualny_nr==nr_linii) tresc=linia; te tresc=linia się wykona, jeśli int aktualny_nr=1 a nr_linii wynosi więcej niż 1?

void Quiz::wczytaj()
{
    fstream plik;
    plik.open("quiz.txt",ios::in);
    if(plik.good()==false) cout << "Nie mozna otworzyc pliku!";

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

    while(getline(plik,linia))
    {
        if(aktualny_nr==nr_linii) tresc=linia;

        aktualny_nr++;
    }
    
    plik.close();
}

 

komentarz 15 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)

Oczywiscie ze zmienia to prawdziwosc warunku. Spojrz na swoj kod, po 1 przypsiujesz wartosc b DO wartosci a, a nie na odwrot, wiec Twoj test sprawdzajacy, czy ma to wplyw na warunek jest bez sensu, bo musisz wypisac a.

a zapis x == y+1, gdzie x to 1, a y to tez 1 spowoduje, ze y beedzie rowny 2. mysle ze lepszym kodem bedzie taka proba:

#include <iostream>

int main()
{
    int x = 0,y = 0;
    int a = 0, b = 0;

    x=1;
    y=1;

    if(x != y+1) {
        std::cout << "ma wplyw";
    } else {
        std::cout << "nie my wplywu";
    }

    return 0;
}

Jezeli x jest rozny od y+1, gdzie y = x, to wtedy ma wplyw.

komentarz 15 marca 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Ale idiota ze mnie... Nie zauważyłem, że sprawdzam coś, co jest oczywiste przypisując do b=2. Dzięki wielkie!
komentarz 15 marca 2020 przez Nabuchadonozor Gaduła (3,120 p.)

Ale przecież wtedy to: 

int aktualny_nr=1;
   string linia;

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

nie powinno się wykonać, jeśli aktualny_nr to jeden a nr_linii zwiększa się o 1 co linijkę, a przecież inkrementacja występuje dopiero po linijkach z IF'ami... Mógłbyś to wytłumaczyć, jeśli wiesz czemu to tak działa?

komentarz 15 marca 2020 przez tkz Nałogowiec (42,000 p.)
Musisz powtórzyć obsługę pliku, pętle while i if'y. Z każdym obrotem pętli jesteś w kolejnej linii pliku. Więc każdy if wykonuje się w danej linii.

Pierwszy if.

Pętla przeskakuje do drugiej linii.

Drugi if.

Pętla przeskakuje do trzeciej linii.

I tak dalej, aż do uzyskania EOF przez getline.
komentarz 16 marca 2020 przez Nabuchadonozor Gaduła (3,120 p.)
To wiem, tylko dlaczego jeśli aktualny_nr != nr_linii a i tak to jest za nawiasem IF'a się wykonuje jeśli to ma być równe a nie różne. Ale dobrze, powtórzę, może na coś wpadnę. Dzięki chęć niesienia pomocy! Ale tematu nie zamykam, może ktoś w końcu to wytłumaczy zanim sam wpadnę na to (jeśli w ogóle wpadnę...).

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 27 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
+1 głos
1 odpowiedź 355 wizyt
0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 20 lutego 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

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

...