Jak to zadziałało? Dwa przypadki, kiedy najpierw coś wypisuje a później zwiększam i na odwrót

0

Witam chcę abyście mi pomogli zrozumieć dlaczego ten kod zadziałał tak a nie inaczej, chodzi mi o dwa przypadki kiedy najpierw coś wypisuje a później zwiększam i na odwrót.

W tym przypadku wypisze mi znaki alfanumeryczne począwszy od t[0] i je dobrze policzy od 0

 bool P( char * s )
{
    char * t = s;
    int ile = 0;
    if( *t )
    {
        while( *t++ != '\0')
        {
            (isalnum(*(t-1)) )? printf("%c",*(t-1)) && ile++ : 0;

        }
        return (( ile == 0 ) ? 0 : 1 );
    }
    return 0;
}

Zaś w tym przypadku nie wypisze pierwszego znaku alfanumerycznego t[0], ale policzy dobrze tyle że od 1

 bool P( char * s )
{
    char * t = s;
    int ile = 0;
    if( *t )
    {
        while( *t++ != '\0')
        {
            (isalnum(*(t-1)) )?  ile++ && printf("%c %i\n",*(t-1),ile): 0;

        }
        return (( ile == 0 ) ? 0 : 1 );
    }
    return 0;
}

Wyniki dla testu:

acs$%^ qd13     4
a 0
c 1
s 2
q 3
d 4
1 5
3 6
4 7

c 2
s 3
q 4
d 5
1 6
3 7
4 8 

Wiem, że jakiś laik ze mnie, ale będę wdzięczny!

2

Bo operacja && jest operacja leniwą:

int main()
  {
   0 && printf("Nie ma mnie\n");
   return 0;
  }
0

mógłbyś napisać coś więcej, albo odesłać mnie do jakiegoś źródła, dziękuje.

Dzięki, zrozumiałem poprawiłem i oba przypadki działają OK. // preinkrementacja

1 użytkowników online, w tym zalogowanych: 0, gości: 1