Twoje zadanie: napisać program, który oczywiście powinien zakończyć się, ale nigdy (w przypadku awarii komputera) tak się nie dzieje. Spraw, by wyglądało na to, że powinno wykonywać proste zadanie: dodawanie liczb, drukowanie czegoś, ... Ale po prostu zostaje złapany w nieskończoną pętlę.
Postaraj się, aby twój program był bardzo przejrzysty i prosty, podczas gdy faktycznie utknie w nieprzewidzianej pętli. Wyborcy: oceń odpowiedzi na to, jak „są podstępni”!
To konkurs popularności: Bądź kreatywny!
popularity-contest
underhanded
Numer 9
źródło
źródło
Odpowiedzi:
JavaScript
źródło
raw_input
lub Python 3input
wywołuje aTypeError
.+
tutaj operator jest konkatenacją łańcucha, a nie dodatkiem.do
Tylko podstawowy przykładowy program ilustrujący trzy różne rodzaje pętli while w C.
źródło
(x --> 0)
JavaScript
źródło
alert
po pętli.a = 1
naa = true
. Kod nadal będzie miał nieskończoną pętlę w ten sposób, ale będzie jasne, że przyczyną nie jest dziwactwo w konwersji JavaScript z ints na booleans.DO#
źródło
l
to ma wyglądać jak1
! Jestem głupi. : \do
A może precyzja?
źródło
HTML / JavaScript
Wyobraź sobie, że masz pole wprowadzania na swojej stronie:
A teraz chcesz coś w nim wpisać ... Wypróbuj w Chrome: http://jsfiddle.net/jZp4X/ .
źródło
C ++
źródło
g++
nie ostrzeże cię przed nimi bez nich.-Wall --pedantic
.-Wsign-compare
który można włączyć-Wextra
.grzmotnąć
(Zgłoszono żądanie braku pętli lub rekurencji)
źródło
bash
się pamięć i ulega awariiyes
to tylko program podstawowy. Nie wywołanie systemowe.do
Litera „x” została utracona w pliku. Napisano program, aby go znaleźć:
Został skompilowany i uruchomić, a na koniec krzyknął:
Przez wiele lat listy były ratowane w ten sposób, dopóki nie pojawił się nowy facet i nie zoptymalizował kodu. Znał typy danych i wiedział, że lepiej jest używać niepodpisanego niż podpisanego dla wartości nieujemnych, ponieważ ma szerszy zakres i zapewnia pewną ochronę przed przepełnieniem. Więc zmienił int na int bez znaku . Znał również ascii wystarczająco dobrze, aby wiedzieć, że zawsze mają one wartość nieujemną. Więc zmienił także char na niepodpisany char . Skompilował kod i wrócił do domu dumny ze swojej dobrej roboty. Program wyglądał następująco:
Wrócił do spustoszenia następnego dnia. Brakowało litery „a” i mimo, że miała znajdować się w „pliku_pustynnym” zawierającym „abc”, program szukał go na zawsze, drukując tylko:
Zwolnili faceta i wycofali się do poprzedniej wersji, pamiętając, że nigdy nie należy optymalizować typów danych w działającym kodzie.
Ale jakiej lekcji powinni się tutaj nauczyć?
PS. Program został zbudowany wokół błędu wymienionego w Paul Assembly Language przez Paula A. Cartera
źródło
Regex
Przy odpowiednich danych wejściowych następujące wyrażenie regularne może spowodować, że większość silnika wyrażeń regularnych cofnie się do piekła:
Proste wprowadzanie, takie jak
"Programming Puzzles and Code Golf Stack Exchange - Mozilla Firefox"
lub"AVerySimpleInputWhichContainsAnInsignificantSentence."
(oba ciągi cytowane dla zachowania przejrzystości), wystarcza, aby większość silników cofania zwrotnego działała przez długi czas.źródło
JavaScript
źródło
Haskell
Pomyśl o tym! Byłoby to to samo, co
head $ "Hello" ++ (repeat '!')
, tj. Powinien po prostu wrócić'H'
.źródło
Java pod Windows
źródło
Aby porównać jabłka i pomarańcze ... w C
Jestem pod wrażeniem, że nie ma tu kodu używającego
goto
... (Wiesz: Goto jest złe! )Sen służy tylko do czytania. Naciśnij ^ C, jeśli nie masz nieskończonej ilości czasu, aby poczekać na coś, co nigdy się nie wydarzy ;-)
źródło
C, z pewnymi kompilatorami optymalizującymi
Ten program zwiększa zmienną całkowitą, aż się przepełni.
źródło
int32_t
; 64-bitowa int zajęłaby naprawdę, bardzo, bardzo długo (585 lat, gdyby każda iteracja trwała nanosekundę).C ++
Dziwny styl komentowania to podstęp. Aluzja: trójkąciki.
źródło
Jawa
Szczególnie podoba mi się ten efekt uboczny optymalizacji autoboxingu:
źródło
= new Integer(0)
, ponieważ i tak inicjujesz wartości. (To może sprawić, że powód będzie mniej oczywisty.)Ruby / C
To działa poprawnie w C , licząc w dół od 9 do 1 na standardowe wyjście. Po uruchomieniu w Ruby nie kończy się, ponieważ
źródło
JavaScript
źródło
do
Powinno to wydrukować tabelę kodów dla wszystkich znaków ASCII, od 0 do 255. A
char
jest wystarczająco duże, aby iterować nad nimi.źródło
printf("%3d %2x: %c", i, i, i);
w pętli możesz użyć czegoś takiego jak (dla tabeli kodów).Pyton
źródło
exit
tak naprawdę jest? Wygląda na klasę, ale do czego służy? Możesz także zmienićprint m
na,print(m)
aby działało to również w Pythonie 3.@moose
zaktualizowana instrukcja drukowania i komunikat spoileraC ++
Co powiesz na klasyczną C ++ - pułapkę programisty?
źródło
keepGoing = true
miał porównać wartośćkeepGoing
, zamiast tego przypisuje wartość dokeepGoing
; ponadto cała instrukcjakeepGoing = true
oceniatrue
(co pozwala na pisanie takich rzeczya=b=c=d=0
), co prowadzi do nieskończonej pętli.== true
(lub w stylu Yodatrue ==
) i tak jest zbędny, a warunek powinien po prostu przeczytaćwhile (keepGoing)
.JavaScript
źródło
var a;var points = 0;function fiftyfifty() {points++;if (Math.random() > 0.5)return true;}; á = fiftyfifty(); while (a === undefined) {á = fiftyfifty();} console.log("Points: " + points);
poddałbym się, usunę to na zawsze, wyczyści mój komputer, być może skaner antywirusowy tylko dla pewności i przepisz go całkowicie. EDYCJA: Ponieważvar a = 0; a = 1;
nie jest bardzo realistycznaJawa:
źródło
C ++
Trochę losowo?
źródło
Haskell
Trochę kodu obliczającego czas obliczenia danej wartości funkcji Ackermanna. W przypadku bardzo niskich wartości zwykle kończy się. Na mojej maszynie bardzo niskie wartości oznaczają około 3 5 lub mniej ze skompilowanym kodem i
-O
. W ghci niskie wartości oznaczają coś w rodzaju 3 3.'
Symbol wydaje się bałagan podświetlanie składni, nie wiem dlaczego. W niektórych miejscach są one potrzebne, więc nie można ich wszystkich usunąć.Edytuj- zmieniony język.
źródło
Java - brak pętli lub rekurencji
Właśnie zacząłem uczyć się wyrażeń regularnych i napisałem swój pierwszy program, aby sprawdzić, czy mój ciąg znaków pasuje do wyrażenia regularnego.
Niestety program nie daje żadnych rezultatów. Podtrzymuje terminal. Proszę o pomoc w znalezieniu problemu. Nie korzystałem z pętli, nie ma żadnej rekurencji. Jestem całkowicie zaskoczony.
Co zrobiłem źle? Dlaczego mój program się nie kończy? Proszę pomóż!
Link Ideone tutaj .
źródło
do
Potrzebujesz tylko jednej z dwóch pętli, ale ta, której potrzebujesz, zależy od twojego kompilatora.
źródło
C / C ++
C ++ zezwala tylko na proste deklaracje zmiennych wbudowanych użyte tutaj, ale równie łatwo jest popełnić ten błąd w zwykłym starym C ...
źródło
DO#
Poniżej przedstawiono prostą klasę wykonującą operację arytmetyczną (sumowanie) na dużej tablicy wejściowej za pomocą wątku w tle. Dołączony jest przykładowy program.
Jednak pomimo tego, że jest to dość proste, nigdy się nie kończy. Zwróć uwagę, że nie ma zręczności (podobieństwa postaci, ukryte / brakujące średniki, kaligrafie ;-) itp.)
źródło