Ihre Aufgabe: Ein Programm zu schreiben, das sich offensichtlich beenden sollte, dies jedoch niemals (im Ausmaß eines Computerabsturzes) tut. Lassen Sie es so aussehen, als ob es eine einfache Aufgabe erfüllen sollte: Zahlen hinzufügen, etwas drucken, ... Aber es gerät einfach in eine Endlosschleife.
Versuchen Sie, Ihr Programm sehr klar und einfach zu gestalten, während es tatsächlich in einer unvorhergesehenen Schleife hängen bleibt. Wähler: Beurteilen Sie die Antworten danach, wie "hinterhältig" sie sind!
Dies ist ein Beliebtheitswettbewerb: Sei kreativ!
popularity-contest
underhanded
Nummer 9
quelle
quelle
Antworten:
Javascript
quelle
raw_input
oder Python 3input
a ausTypeError
.+
Operator hier ist die String-Verkettung, nicht die Addition.C
Nur ein einfaches Beispielprogramm, das die drei verschiedenen Arten von while-Schleifen in C veranschaulicht.
quelle
(x --> 0)
JavaScript
quelle
alert
nach der Schleife.a = 1
zua = true
. Der Code wird auf diese Weise immer noch die Endlosschleife haben, aber es wird klarer, dass der Grund nicht irgendeine Eigenheit bei der JavaScript-Konvertierung von ints in boolesche Werte ist.C #
quelle
l
soll aussehen wie ein1
! Ich bin dumm. : \C
Wie wäre es mit Präzision?
quelle
HTML / JavaScript
Stellen Sie sich vor, Sie haben ein Eingabefeld auf Ihrer Seite:
Und jetzt möchten Sie etwas eingeben ... Versuchen Sie es in Chrome: http://jsfiddle.net/jZp4X/ .
quelle
C ++
quelle
g++
Ich werde Sie ohne sie nicht davor warnen.-Wall --pedantic
sowieso immer verwenden .-Wsign-compare
was mit eingeschaltet werden kann-Wextra
.bash
(Es gab eine Anfrage für keine Schleifen oder Rekursion)
quelle
bash
der Speicher aus und es stürzt abyes
ist nur ein Coreutils-Programm. Kein Syscall.C
Der Buchstabe "x" ist in einer Datei verloren gegangen. Ein Programm wurde geschrieben, um es zu finden:
Es wurde kompiliert und lief und es schrie schließlich:
Seit vielen Jahren werden Briefe auf diese Weise gerettet, bis der neue Typ kam und den Code optimierte. Er war mit Datentypen vertraut und wusste, dass es besser ist, vorzeichenlose statt vorzeichenbehaftete Werte zu verwenden, da diese einen größeren Bereich haben und einen gewissen Schutz vor Überläufen bieten. Also hat er int in unsigned int geändert . Er kannte Ascii auch gut genug, um zu wissen, dass sie immer einen nicht negativen Wert haben. Also hat er auch char in unsigned char geändert . Er kompilierte den Code und ging stolz auf seine gute Arbeit nach Hause. Das Programm sah so aus:
Er kam am nächsten Tag zu einem Chaos zurück. Der Buchstabe "a" fehlte und obwohl er in der "desert_file" mit "abc" enthalten sein sollte, suchte das Programm danach und gab nur Folgendes aus:
Sie entließen den Kerl und kehrten zur vorherigen Version zurück, wobei sie sich daran erinnerten, dass man Datentypen im Arbeitscode niemals optimieren sollte.
Aber welche Lektion hätten sie hier lernen sollen?
PS. Das Programm wurde um den in der PC-Assemblersprache von Paul A. Carter erwähnten Fehler herum erstellt
quelle
Regex
Bei entsprechender Eingabe kann der folgende reguläre Ausdruck dazu führen, dass die meisten regulären Rückverfolgungsmodule in die Hölle der Rückverfolgung geraten:
Einfache Eingaben wie
"Programming Puzzles and Code Golf Stack Exchange - Mozilla Firefox"
oder"AVerySimpleInputWhichContainsAnInsignificantSentence."
(beide Zeichenfolgen werden aus Gründen der Übersichtlichkeit angegeben) reichen aus, um die meisten Backtracking-Regex-Engines lange laufen zu lassen.quelle
JavaScript
quelle
Haskell
Nun, denk dran! Es wäre das gleiche wie
head $ "Hello" ++ (repeat '!')
, dh sollte gerade zurückkehren'H'
.quelle
Java unter Windows
quelle
Äpfel und Orangen vergleichen ... in C
Ich bin beeindruckt, dass es hier keinen Code gibt, der ein
goto
... verwendet. (Sie wissen: Springen ist böse! )Der Schlaf dient nur dazu, ihn lesen zu können. Drücke ^ C, wenn du nicht unendlich viel Zeit hast, um auf etwas zu warten, das niemals passiert ;-)
quelle
C, mit bestimmten optimierenden Compilern
Dieses Programm erhöht eine Ganzzahlvariable, bis sie überläuft.
quelle
int32_t
; Ein 64-Bit-Int dauert sehr, sehr, sehr lange (585 Jahre, wenn jede Iteration eine Nanosekunde dauert).C ++
Der seltsame Kommentarstil ist der Trick. Andeutung: Trigraphen.
quelle
Java
Ich mag diesen Nebeneffekt der Autoboxing-Optimierung besonders:
quelle
= new Integer(0)
, da Sie die Werte danach sowieso initialisieren. (Dies könnte den Grund weniger offensichtlich machen.)Ruby / C
Dies funktioniert korrekt in C , wobei in STDOUT von 9 auf 1 heruntergezählt wird. Wenn es in Ruby ausgeführt wird, wird es nicht beendet, weil
quelle
JavaScript
quelle
C
Dies sollte eine Codetabelle für alle ASCII-Zeichen von 0 bis 255 ausgeben. A
char
ist groß genug, um darüber zu iterieren.quelle
printf("%3d %2x: %c", i, i, i);
(für eine Codetabelle) in Ihrer Schleife.Python
quelle
exit
eigentlich ist? Es scheint eine Klasse zu sein, aber wofür wird sie verwendet? Sie können auch ändernprint m
,print(m)
so dass dies auch mit Python 3 funktioniert.@moose
aktualisierte print-Anweisung und die Spoiler-NachrichtC ++
Wie wäre es mit der klassischen C ++ - Programmiererfalle?
quelle
keepGoing = true
sollte den Wert von vergleichenkeepGoing
, weist stattdessen den Wert zukeepGoing
; zusätzlich die gesamte AussagekeepGoing = true
ausgewertettrue
(das ist , was du Dinge wie schreiben kanna=b=c=d=0
) , was zu einer Endlosschleife.== true
(oder Yoda-Stiltrue ==
) ist sowieso überflüssig, und die Bedingung sollte einfach gelesen werdenwhile (keepGoing)
.Javascript
quelle
var a;var points = 0;function fiftyfifty() {points++;if (Math.random() > 0.5)return true;}; á = fiftyfifty(); while (a === undefined) {á = fiftyfifty();} console.log("Points: " + points);
Ich würde aufgeben, dies für immer löschen, meinen Computer säubern, vielleicht einen Virenscanner, nur um sicherzugehen und es komplett neu zu schreiben. BEARBEITEN: Davar a = 0; a = 1;
ist nicht sehr realistischJava:
quelle
C ++
Ein bisschen zufällig?
quelle
Haskell
Einige Code, um die Berechnung eines bestimmten Wertes der Ackermann-Funktion zu verzögern. Bei sehr niedrigen Werten endet es normalerweise. Auf meinem Rechner bedeuten sehr niedrige Werte so etwas wie 3 5 oder kleiner mit kompiliertem Code und
-O
. In ghci bedeuten niedrige Werte so etwas wie 3 3.Das
'
Symbol scheint die Syntaxhervorhebung durcheinander zu bringen, nicht sicher warum. An einigen Stellen werden sie benötigt, sodass nicht alle entfernt werden können.Bearbeitete Sprache.
quelle
Java - Keine Schleifen oder Rekursionen
Ich habe gerade angefangen, reguläre Ausdrücke zu lernen und habe mein erstes Programm geschrieben, um zu testen, ob meine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.
Leider liefert das Programm kein Ergebnis. Es hält das Terminal hoch. Bitte helfen Sie bei der Suche nach dem Problem. Ich habe keine Schleifen benutzt, es gibt keine Rekursion. Ich bin völlig ratlos.
Was habe ich falsch gemacht? Warum endet mein Programm nicht? Bitte helfen Sie!
Ideone Link hier .
quelle
C
Sie sollten nur eine der beiden Schleifen benötigen, aber welche Sie benötigen, hängt von Ihrem Compiler ab.
quelle
C / C ++
C ++ erlaubt nur die hier verwendeten einfachen Inline-Variablendeklarationen, aber es ist genauso einfach, diesen Fehler in ...
quelle
C #
Das Folgende ist eine einfache Klasse, die eine arithmetische Operation (Summation) für ein großes Eingabearray unter Verwendung eines Hintergrundthreads ausführt. Ein Beispielprogramm ist enthalten.
Obwohl es ganz einfach ist, wird es nie beendet. Beachten Sie, dass es keine Fingerfertigkeit gibt (Zeichen-Lookalikes, versteckte / fehlende Semikolons, Trigraphen ;-) usw.)
quelle