Marcus EMedlem sedan maj 20021 466 inlägg
PeW skrev:
Däremot kan ju break användas till andra saker...
Till vadå? switch-satser?
Toonster skrev:
I exemplen du visar, så är det while-satsen som är given, och där kan break användas.
Det där låter inte klokt i mina öron.
PeW skrev varför break var bannlyst i alla loopar. while och do är lika mycket loopar som for.
for är dessutom bara en utökad while-loop.
for(a; b; c) {d}
är nästan exakt samma sak som
a; while(b) {d c;}
BeatboxMedlem sedan okt. 20013 217 inlägg Om break inte va tänkt att användas i loopar för att avbryta så är det ju väldigt lustigt att nyckelordet continue existerar.
PeWMedlem sedan juni 200010 432 inlägg
Beatbox skrev:
Om break inte va tänkt att användas i loopar för att avbryta så är det ju väldigt lustigt att nyckelordet continue existerar.
:OO
Bara för att en detalj existerar är det inte säkert att det är lyckat att använda den. Goto existerar ju det med... eller hur? Problemet med C och C++ är just den arsenal med verktyg de skickar på användaren.. och det är inte bara de så omtalade pekarna som är farliga - utan dålig "logisk" kodning kan vara så mycket värre ;)
Men men ... åter till TOPIC!
Kan nån tyda copers felmeddelande?
Marcus EMedlem sedan maj 20021 466 inlägg
PeW skrev:
Bara för att en detalj existerar är det inte säkert att det är lyckat att använda den. Goto existerar ju det med... eller hur?
Så sant, men jag anser inte att goto är dåligt i alla lägen. Det kan t.ex. användas istället för try-satser i C.
Inget nyckelord är dåligt om det används på rätt sätt.
PeW skrev:
inte bara de så omtalade pekarna som är farliga
Pekare är inte ett dugg farliga om de används på rätt sätt.
PeW skrev:
Kan nån tyda copers felmeddelande?
Det har jag redan gjort.
ToonsterMedlem sedan feb. 20001 590 inlägg
Det där låter inte klokt i mina öron.
Det är ju för tusan en grundläggande, ganska stor skillnad mellan for och while. for är en iteration ett bestämt antal gånger, while är en iteration med obestämt antal gånger.
Är nästan exaxt samma sak skriver du, men det är det inte alls.
Själva poängen är ju antalet iterationer och hur de styrs, inte om det kodmässigt utför snarlikt samma saker.
En gång för alla:
for -> när du vet antalet iterationer
while -> när du inte vet antalet iterationer
Som nämndes tidigare, i en tenta hade det blivit avdrag om du blandat ihop for/while och hur de ska användas.
Det kan t.ex. användas istället för try-satser i C
try och catch är fundamentalt olikt goto satsen. try catch används för att försöka utföra något, och om det inte går, retur med felkod el dyl, så utförs catch statement.
goto är till ondo bara ett statement som inte får existera i strukturerad programmering. JSP mina vänner, JSP...
/T
PeWMedlem sedan juni 200010 432 inlägg
Det har jag redan gjort.
Och ändå så... (du vet vad) ;)
Marcus EMedlem sedan maj 20021 466 inlägg
Toonster skrev:
Det är ju för tusan en grundläggande, ganska stor skillnad mellan for och while. for är en iteration ett bestämt antal gånger
Givetvis, men det var inte det jag syftade på. Du påstår att man utan problem kan använda break i en while-sats. Dessutom påstår du att while är bättre än for i mitt exempel.
Är det inte bättre att använda en for-sats och avbryta den när sökningen är klar, istället för att göra koden mer komplicerad genom att använda en while-sats eller låta den datorn arbeta längre än nödvändigt genom att undvika att avbryta for-satsen?
Man behöver inte avbryta for-satsen med break, som du såg i mitt exempel tidigare.
Toonster skrev:
try och catch är fundamentalt olikt goto satsen
Jaså. Med throw hoppar man till en felsökare (catch) och det kan man göra med goto också. Visste du att try är C++ och inte finns i C?
PeW skrev:
Och ändå så... (du vet vad)
Nej, jag vet inte.
BeatboxMedlem sedan okt. 20013 217 inlägg
Bara för att en detalj existerar är det inte säkert att det är lyckat att använda den. Goto existerar ju det med... eller hur? Problemet med C och C++ är just den arsenal med verktyg de skickar på användaren.. och det är inte bara de så omtalade pekarna som är farliga - utan dålig "logisk" kodning kan vara så mycket värre
Bjarne skriver så här om break och continue :
A break-statement exists its nearest enclosing switch-statement or loop (that is, a for-statement, while-statement, or do-statement). A continue-statement is equvivalent to going to the very end of a loop
jmeMedlem sedan maj 20012 237 inlägg toonster:
Det är ju för tusan en grundläggande, ganska stor skillnad mellan for och while. for är en iteration ett bestämt antal gånger, while är en iteration med obestämt antal gånger.
men om en for-sats är en iteration med ett bestämt antal gånger;
vad är då:
for(;;)
{
}
PhorpherMedlem sedan feb. 20002 300 inlägg
jme skrev:
toonster:
men om en for-sats är en iteration med ett bestämt antal gånger;
vad är då:
for(;;)
{
}
Det är otroligt ful kodning. Det är vad det är. :e
BeatboxMedlem sedan okt. 20013 217 inlägg En markering att det är en enumeration liknande "for each" som finns i C# och VB.
PeW skrev:
Men men ... åter till TOPIC!
Kan nån tyda copers felmeddelande?
Jag tycker PeW var ganska tydlig. Ingen pajkastning, tack.
BeatboxMedlem sedan okt. 20013 217 inlägg Line 34 säger inte så mycket då man inte har hela källkoden.
ToonsterMedlem sedan feb. 20001 590 inlägg jme ->ungefär som;
while(1){
}
Det är inte hur man kodar, med fula knep eller inte, utan hur man strukturerar uppgiften.
Marcus E-> I ditt exempel så ska du naturligtvis använda for satsen om du vet antal iterationer, annars while (känns som jag upprepar mig). Men du får naturligtvis använda vad du vill.
Jaså. Med throw hoppar man till en felsökare (catch) och det kan man göra med goto också. Visste du att try är C++ och inte finns i C?
Ja, jag har jobbat med C/C++ programmering professionellt på heltid sedan juni 94....
/T
PeWMedlem sedan juni 200010 432 inlägg
Beatbox skrev:
Bjarne skriver så här om break och continue :
A break-statement exists its nearest enclosing switch-statement or loop (that is, a for-statement, while-statement, or do-statement). A continue-statement is equvivalent to going to the very end of a loop
:OO Nu har det inte specifikt med språket C++ att göra enbart, det här med undvikande av break & goto... utan det är programmeringstekniskt betraktat - oavsett språk.
Toonster skrev:
Men du får naturligtvis använda vad du vill.
Precis! Det som diskuterats är ju endast lite råd om god programmeringsstil på ett givet exempel... ;)
Re: Gaaaaaah!
PeW skrev:
"break" är bannade i loopar, ett solklart minus om det vore en tenta ;)
Bättre med:
#include <stdio.h>
#include <conio.h>
int main()
{
int c = 'j';
while(c=='j' || c=='J')
{
// Gör uppgiften
printf("Färdig? ");
int c = getch();
if(c == 'j' || c == 'J');
}
}
Antar att du slarvade lite när du skrev den där koden, PeW ;)
För övrigt är jag tämligen säker på att Bjarne Stroustrup använder sig av
for(;;)
och
break;
i sin exempelkod.
PeWMedlem sedan juni 200010 432 inlägg Men Bjarne liksom farbröderna med meterskäggen bakom Java, proggar inte m.h.a effektivitet och användbarhet alla gånger, eller hur? ;) Bara för att det går att göra en sak är det inte säkert att det är bra. Och bara för att ett tungt namn kläcker ur sig lite kod behöver den inte vara användbar generellt sett.
Tydligen finns det många uppfattningar om vad som är bra och dålig kod.
eftersom man vanligtvis nästlar loopar, traverserar strukturer och bygger ganska komplexa saker
Du skriver att break kan orsaka en del problem.
Då jag använder mig inte mycket, men en del av break, så skulle jag vilja se ett exempel på hur problem kan uppstå så att jag kan undvika framtida krångel.
PS:
Skulle inte do -- while vara den bästa lösningen?
Inga onödiga tester eller några variabler utanför loopen.