C++ - Instrukcja warunkowa.
Ostatnio zmodyfikowano 2014-12-17 09:44
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: #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ć: 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) |
|
kubawal |
» 2014-12-17 09:44:53 if( ktory == 0 ) { if( oryginal[ licznik ] == 32 ) { ktory = 1; } } 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. |
|
« 1 » |