tecken && i: sant om tecken pekar mot NULL, vilket det inte gör. Alltså falskt. Därmed struntar vi i de två nästföljande if-satserna, och går direkt vidare till första else.
if (!i): sant, eftersom i == falskt.
if (tal + i): falskt, eftersom tal + i == 0.
Därför skrivs inte nästföljande sats, som du vill ha utskriven.
Jag skulle sätta tal = 1 i början. Då borde den önskade utskriften komma, för då skulle den sista if-satsen bli sann. De andra if-satserna som tal förekommer i, kommer man i vilket fall som helst inte till, så det blir den enda skillnaden.
Jag reserverar mig för att jag själv tycker det såg tillkrånglat ut. ;)
När jag tänker efter, har jag nog resonerat fel angående den första if-satsen. Men slutsatsen angående den, bör vara rätt. Egentligen blir "vad som helst" && 0 == 0 och därmed falskt. Så slutsatsen är fortfarande densamma, även om resonemanget bakom den var tokigt.
När jag tänker efter, har jag nog resonerat fel angående den första if-satsen. Men slutsatsen angående den, bör vara rätt. Egentligen blir "vad som helst" && 0 == 0 och därmed falskt. Så slutsatsen är fortfarande densamma, även om resonemanget bakom den var tokigt.
Förändingar får jag genom att sätta tal = 1 samt i = 1.
Förändring:
"Vad händer?"
"Nu är det slut!"
Åtminstone kan vi konstatera att du därmed kommer till if(!i). Eftersom i == 1, blir !i == falskt. Då får du inte den utskrift du ville ha. Förmodligen har jag tänkt fel angående de if-satser som jag påstod kommer hoppas över. Om vi antar att båda dessa if-satser utförs, då borde vi ha:
if (tal || i): sant om minst en av dem är 1.
if (!tal): falskt om tal == 1. Sant om tal == 0.
Den första if-satsen (if (tecken && i)) borde bli sann om i == 1. Då utförs nästa if-sats, som under samma förutsättningar, därmed är sann, även om tal == 0. Detta ger att (if(!tal)) blir sann om tal == 0. Men då blir ju if(!i) som sagt falsk.
Jag kom att tänka på att du inte specificerade hur man får ändra. Hittills har vi bara resonerat om ändringar av variablerna. Men tänk om man får ändra även på villkoren? Då skulle man kunna tänka sig:
i = 1 och tal = 1 som utgångspunkt.
if(tecken && i): sant, eftersom både tecken och i skiljer sig från noll, och därmed är sanna.
if(tal || i): sant, eftersom minst en av dem är sanna.
if(!tal); : falskt, eftersom tal är sant.
därmed kommer vi till följande villkor:
if(!i)
Med i == 1, blir ju det villkoret falskt, och den önskade texten uteblir. Men om det är tillåtet att ändra villkoret, skulle vi lika gärna kunna skriva det som:
if(i)
Då blir det sant, och vi kommer till:
if (tal+i)
där tal + i skiljer sig från noll. Det villkoret är därmed också sant, och den önskade texten skrivs ut.