webForumDet fria alternativet

Programmeringsmissar att skratta åt

21 svar · 953 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Tydal skrev i PHP-forumet apropå en sällsynt knasig fråga från vänstertecknad:

tydal skrev:

aasah skrev:

Glöm denna tråd, tack.... :r

Det är sånt här man lär sig på. Jag glömmer aldrig när en klasskompis till mig på högskolan (jo, en tjej faktiskt) ville ha lite hjälp med programmeringen. Hon lyckades inte få sitt program att fungera och hon sa att det blev just parse error. Jag sa att det måste vara något litet tecken som är fel, kanske nåt semikolon. Men nej då, det var det inte, sa hon, för hon hade kollat jättenoga och hon hade inte glömt något semikolon. Hon var säker på att det var något fel på datorn. Så jag följde ju med henne till datorsalen för att kolla på hennes kod, och det visade sig vara en intressant upplevelse. Hon hade faktiskt inte glömt något semikolon. Verkligen inte. Snarare tvärtom...

if (a == 2);
  printf("Nu minns jag inte vad som stod här...");
else if (a == 3);
  printf("... och jag har för dålig fantasi...");
else;
  printif("... men ni förstår principen.");

Och det får mig att minnas en del (i efterhand) roliga fel man gjort... :OO

I ett flera hundra rader långt C-program lyckades jag med något liknande för ett (bra) tag sedan... I en av de första raderna:
# DEFINE stop 7;
...
Alldeles mot slutet:
for (i =1; i < stop; i++) { .... }

Det felsöktes i timmar innan vår lärare hittade felet.... :r

Vad har ni gjort för oförglömliga tabbar...?

Red: //Ursäkta, har inte använt C sedan den kursen tog slut och lärde mig det inte ordentligt då heller. Det blev visst lite extra fel i "programmet" nu. Dock berodde allt utom ';':t på uruselt minne...

MeleaMedlem sedan juli 20033 147 inlägg
#2

Har nog förträngt de flesta. ;)

SirPeterMedlem sedan feb. 200115 571 inlägg
#3

Kan någon förklara det där för oss som inte kan något om programmering?

tydalMedlem sedan juni 20034 013 inlägg
#4

I Basic-liknande språk använder man ny-rad för att tala om ett kommando är slut. Ett kommando kan alltså (i normalfallet) inte vara längre än en rad.

I C-liknande språk använder man istället ett semikolon ; för att tala om att kommandot är slut och ett kommando kan ta upp hur många rader som helst.

Bland nybörjare i C-liknande språk är det vanligt att man råkar glömma ett semikolon här eller där, och då klagar ju datorn eftersom den då inte vet var kommandot tar slut.

Emellertid är det så att en del kommandon ska inte avslutas med semikolon. If, else if och else är exempel på sådana. Min klasskompis hade gjort misstaget att sätta ut semikolon även på dessa.

Gislaved.netMedlem sedan juni 20001 521 inlägg
#5

Jag gjorde en häromveckan faktiskt.

$antal = $_GET["antal"];
$korrekt = 3;

if($antal = $korrekt){
   echo "Korrekt.";
} else {
   echo "Inkorrekt.";
}

Jag letade länge efter felet. :e

SirP, det borde stått # define stop 7 i aasahs kod. Likhetstecknet och semikolonet förstörde allt.

/red skrifvel

PhorpherMedlem sedan feb. 20002 300 inlägg
#6

SirPeter skrev:

Kan någon förklara det där för oss som inte kan något om programmering?

# DEFINE stop = 7;

Detta ska vara ett makro i C. Dock felskrivet. Alla förekomster av STOP ska ersättas med 7 är tanken.

Rätt:

#define STOP 7 // Inget likamed eller semikolon.
for (int i =1; i < stop; i++) { .... }

Eftersom det var C så är inte deklarationer av den här typen godkända. I C måste alla deklarationer av variabler ske i början på ett block.

aasahMedlem sedan mars 20034 471 inlägg
#7

En Ansvarig som inte kan något om programmering!?! :q Men visst... Jag antar att det är min tabbe du undrar över?

# DEFINE stop 7;
Detta är ett meddelande till preprocessorn. Byt ut stop mot allt efter rakt av. Så när preprocessorn var klar stod det:
for (i =1; i < 7; ; i++) { .... }
Så det funkade mindre bra... :(

Det är oerhört viktigt i C att alltid avsluta med ';'.... dock INTE efter preprocessor kommandon....

//Ursäkta, har inte använt C sedan den kursen tog slut och lärde mig det inte ordentligt då heller. Det blev visst lite extra fel i "programmet" nu. Dock berodde allt utom ';':t på uruselt minne... :r

tydalMedlem sedan juni 20034 013 inlägg
#8

#define innebär en slags sök och ersätt. Det första ordet du skriver efter är det som den letar efter och allt du skriver efter är det den ersätter med.

#define stop = 7;

letar alltså efter stop och ersätter det med = 7; vilket ledde till att datorn klagade på att man hade stavat fel på raden längst ner i koden där Åsa då använder sig av stop.

Åsa skulle ha skrivit:
#define stop 7

vilket hade ersatt stop med 7.

Eller så hade hon kunnat skapa en variabel som hette stop och hade värdet 7:

int stop = 7;

(int betyder att variabeln ska vara av typen "integer" (engelska för heltal)).

BrantisMedlem sedan dec. 20011 978 inlägg
#9

Det borde väl stått #define stop 7; eller något ... ;)

:stefan:Medlem sedan apr. 200015 687 inlägg
#10

*blundar och läser en annan tråd istället* :e

hypatiaMedlem sedan feb. 20016 388 inlägg
#11

*äter en glass istället*

spangoMedlem sedan juni 20008 205 inlägg
#12

Inga tabbar, utan tvärtom helt fungerande men kul kod:
http://www.kuro5hin.org/story/2004/6/1/43942/41236

Personlig favorit:

Perl är känt för att ibland kunna orsaka rätt kryptisk kod, så Perlkodare brukar ibland försöka excellera i att skriva oläsbarheter. Någon skriver:
Note to you perl people: "cryptic" != "funny".
I de flesta C-baserade språk betyder != "skilt från", så man skulle kunna tro att detta i Perl blir logisk sanning, eftersom texten "cryptic" skiljer sig från "funny". Men hej...

coderlemming skrev:

Wait a minute...

#!/usr/bin/perl

if ("cryptic" != "funny") {
  print "Cryptic PERL programs are not funny.\n";
} else {
  print "Cryptic PERL programs are funny.\n";
}

Och vad skrivs ut när man kör programmet...?
Cryptic PERL programs are funny.

M.CheraghiMedlem sedan juli 20015 107 inlägg
#13

Jag gillar inte att obegripliga trådar finns i cafét :e
Det borde flyttas till programmering övrigt.
Cafét är till för nötter som mig som vill att allt ska vara lika simpelt som Duplo ;)

DrydenMedlem sedan aug. 200218 625 inlägg
#14

Dags att röra på sig. Tråden flyttas från Caféet i samarbete med Jämtflytt. ;)

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#15

Ibland tror man verkligen att det är ett hårdvarufel. Men så är det bara någon löjlig lite skitsak. Kan absolut inte hitta det själv, men kollar någon annan på det så hittar de det direkt. :)

Ibland kan också någon annans magic hands hjälpa. Man kan klicka på den där grejen 20 gånger o få samma mystiska fel, men när någon annan kommer och provar så funkar det helt plötsligt. :)

PeppoMedlem sedan sep. 2003205 inlägg
#16

Mitt bidrag (inga missar kanske men klantigt gjort):
if klockan>1 or klockan<3 then...
Var lite trött när jag skrev det :birp

Är rätt duktig på att gör dubbelnegationer också när jag glömmer bort att använda hjärnan:
if not i<>1 then... :r :e

PaceMedlem sedan juni 20019 024 inlägg
#17

Titta på bloggen The Daily WTF om detta intresserar er.

Se exempelvis denna eleganta och effektiva kod:

;)

GunnarDMedlem sedan juni 20014 290 inlägg
#18

Kanske lite OT men var inte programmering roligare för?

Apple's gamla C kompilator kunde ge en del roliga felmeddelanden: http://www.effect.net.au/lukastan/humour/Computing-Software/Error-Messages-Mac.htm

BrimbaMedlem sedan dec. 19995 875 inlägg
#19

GunnarD skrev:

Kanske lite OT men var inte programmering roligare för?

Jo, och tur är väl det!

Sang-draxMedlem sedan juli 2002581 inlägg
#20

För några år sedan hade jag ett DirectX-spel som krashade efter några minuters körning. Jag såg efter ett tag i Task Manager att minnesanvändningen steg konstant.
Efter ett längre tag hittade jag följande av mig välskriva funktion:

//DrawText v2.0
DxEngine* DxEngine::DrawText(int x, int y,const Color& c,TCHAR *szFormat, ...)
{
    TCHAR *szBuffer=new char[strlen(szFormat)+512];// Large buffer for very long text

    va_list pArgs;
    va_start(pArgs, szFormat);
    vsprintf(szBuffer, szFormat, pArgs);
    va_end(pArgs);

    HDC hdc;

    if(lpddsback->GetDC(&hdc)==DD_OK)
    {
        SelectObject(hdc,hFont);
        SetTextColor(hdc, RGB(c.r,c.g,c.b));
        SetBkMode(hdc, TRANSPARENT);
        TextOut(hdc, x, y, szBuffer, strlen(szBuffer));
        lpddsback->ReleaseDC(hdc);
    }

 return this;

 delete[] szBuffer;
}
127 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)