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

Proste pytanie odnosnie C++

0 głosów
1,566 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,040 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ź 224 wizyt
pytanie zadane 27 marca 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
+1 głos
1 odpowiedź 619 wizyt
0 głosów
1 odpowiedź 715 wizyt
pytanie zadane 20 lutego 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...