Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ - Instrukcja warunkowa.

Ostatnio zmodyfikowano 2014-12-17 09:44
Autor Wiadomość
mti120
Temat założony przez niniejszego użytkownika
C++ - Instrukcja warunkowa.
» 2014-12-16 22:45:04
Witam,
jestem początkującym programistą i nie mogę zrozumieć jednej kwestii
Przejdźmy do rzeczy oto mój kod zanim znalazłem błąd:
C/C++
#include <iostream>

using namespace std;

char oryginal[ 100 ] = { "Program sluzacy do wybierania co drugiego slowa z tego zdania i wkladania go do innej tablicy" };
char npar[ 100 ];
char parz[ 100 ];

void przeksz( char oryginal[], char lewa[], char prawa[] )
{
    int licznik = 0;
    bool ktory = 0;
    int liczniklewa = 0;
    int licznikprawa = 0;
    do
    {
        if( ktory == 0 )
        {
            if( oryginal[ licznik ] == 32 )
            {
                lewa[ liczniklewa ] = 32;
                ktory = 1;
                liczniklewa++;
            }
            else
            {
                lewa[ liczniklewa ] = oryginal[ licznik ];
                liczniklewa++;
            }
           
        }
        if( ktory == 1 )
        {
            if( oryginal[ licznik ] == 32 )
            {
                prawa[ licznikprawa ] = 32;
                ktory = 0;
                licznikprawa++;
            }
            else
            {
                prawa[ licznikprawa ] = oryginal[ licznik ];
                licznikprawa++;
            }
           
        }
       
        licznik++;
    } while( oryginal[ licznik ] != NULL );
   
}

int main()
{
    przeksz( oryginal, npar, parz );
   
    cout << oryginal << endl;
    cout << npar << endl;
    cout << parz << endl;
    return 0;
}

Na ekranie pojawiał mi się poprostu 2 napisy:
Program sluzacy do wybierania co drugiego slowa z tego zdania i wkladania go do innej tablicy
Program sluzacy do wybierania co drugiego slowa z tego zdania i wkladania go do innej tablicy

Jednakże po wstawieniu magicznego słówka "else" o tutaj program zaczyna normalnie działać:
C/C++
liczniklewa++;
}

}
else if( ktory == 1 )
{
if( oryginal[ licznik ] == 32 )

Piszę ten post nie dla tego że mój kod nie działa lecz mam pewną nie jasność w umyśle, bo jeżeli instrukcja (if (ktory==0)) się nie wykona (a bool ktory = 1) to dlaczego nie wykonuje się kolejna część instrukcji a mianowicie ten drugi if i dlaczego dodanie słówka else zmienia tę postać diametralnie mimo iż patrząc linia po lini warunek bez else i tak powinien się wykonać.
Jeżeli ktoś miał by chęć mi to wytłumaczyć byłbym wdzięczny (rozdział o instrukcji if czytałem i nie znalazłem tam odpowiedzi)
P-122974
kubawal
» 2014-12-17 09:44:53
C/C++
if( ktory == 0 )
{
    if( oryginal[ licznik ] == 32 )
    {
        //...
        ktory = 1; // o tu tu właśnie
    }
    //...
}
if( ktory == 1 )
{
    //...

Na początku ktory jest równe 0 więc wykona się pierwszy if, w którym (prawdopodobnie) ktory zmieniasz na 1. Po wykonaniu pierwszego ifa program sprawdza warunek drugiego ifa, a dziwnym trafem ktory jest równe 1.

else if powoduje, że watrunek drugiego ifa jest sprawdzany tylko, jeśli warunek drugiego ifa jest nieprawdziwy.
P-122983
« 1 »
  Strona 1 z 1