2010-08-11 7 views
5

Mögliche Duplizieren falsch:
Help with C puzzleWas ist mit diesem C-Programm

Die Absicht des Programms war ein Minuszeichen 20 Mal zu drucken, aber es funktioniert nicht.

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i--) 
      printf("-"); 
     return 0; 
    } 
+1

Was ist die Ausgabe/Fehler? – James

+1

gibt es unendliches Minuszeichen ... – SurajRk

+4

Ist das ein Hausaufgabenproblem? –

Antwort

24
#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; i++) 
      printf("-"); 
     return 0; 
    } 

Sie hatte -- statt ++

+5

Yup, diese Schleife wird für immer laufen, weil "i" bei "0" beginnt und immer kleiner wird. Es wird niemals größer als * n * sein, so dass die Ausgangsbedingung der Schleife niemals erreicht wird. – FrustratedWithFormsDesigner

+4

Sicher wird es größer als n sein, wenn die ganze Zahl umgeht? Die Schleife wird nur etwas länger laufen als beabsichtigt. – signine

10

ersetzen i-- mit i ++.

4
int main() { 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i++) 
    printf("-"); 
    return 0; 
} 

Sie hatten Dekrement statt Inkrement.

2

Haben Sie versucht, die

i-- 

zu

i++ 

Sie haben die Änderung der Schleife eine auszudrucken „-“ so lange, wie „i“ weniger als 20 wird nach jedem Schleife Sie reduzieren den Wert von i um 1, wird es weiterhin für eine sehr lange Zeit drucken. Wenn Sie den letzten Teil der for-Schleife in "i ++" ändern, wird in jeder Schleife eine Iteration ausgeführt und nach Abschluss der zwanzigsten Iteration gestoppt.

1

die i-- muss i

++ werden Sie auch

tun konnte
int n = -20; 
    for(i = 0; i > n; i--) 

aber das ist eine schlechte Praxis Codierung

+4

Warum schlagen Sie eine Antwort vor, die eine schlechte Programmierpraxis ist? –

+2

weil Sie in anderen Situationen Ihren Zähler dekrementieren möchten. In diesem Fall macht das Dekrementieren des Zählers keinen Sinn. – Forge

+2

@Jamie Kreativität;) Man kann sogar von etwas lernen, das nicht auf eine bestimmte Art und Weise gemacht werden sollte. –

-1

Sie werden keine Striche gedruckt werden. Sie können entweder mit Jaime Wong-Lösung gehen oder dies tun:

for (i = n; i >= 0; i--)

+0

Sie werden so viele Striche drucken. Das ist auch eine schreckliche Art, das zu tun. Sehr oft nicht die Norm, und ist sinnlos leicht obskur. –

+4

Das wird keine Gedankenstriche drucken, wie alle anderen erklärten. Sie haben meinen Namen falsch geschrieben. –

+0

Hoppla, du hast Recht. Entschuldigung, in beiden Fällen. –

2

ändern i-- zu i ++. i-- dekrementiert den Wert, der beim Start 0 ist und bei nachfolgenden Reduktionen nicht 20 (oder +20) erreicht.

26

Dies ist ein klassisches Puzzle!

So wie ich es sah

war

„können Sie nur ändern/Insert/ein Zeichen im Code löschen Sie das machen - print 20 Mal“.

Einige Antworten sind (wenn ich sie richtig erinnere)

1)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; -i < n; i--) 
      printf("-"); 
     return 0; 
    } 

Hier haben Sie die i < n zu -i < n

2)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i < n; n--) 
      printf("-"); 
     return 0; 
    } 

Hier können Sie ändern ändern die i-- bis n--

3)

#include <stdio.h> 
    int main() 
    { 
     int i; 
     int n = 20; 
     for(i = 0; i + n; i--) 
      printf("-"); 
     return 0; 
    } 

Sie ändern die i < n-i+n.

Für eine Herausforderung, versuchen Sie ändern/Einfügen/Löschen eines Zeichens, um es drucken - mal. (Lesen Sie nicht die Kommentare zu dieser Antwort, wenn Sie es versuchen möchten!)

+3

+1, um dies zu einem Puzzle zu machen. Gut durchdachte Antwort. –

+1

Die Herausforderung war lustig;) Ich bin froh, dass ich die Kommentare nicht gelesen habe, bevor ich versucht habe, sie zu beantworten. –

1

Was genau versuchen Sie mit diesem Problem zu tun ??? Hier versuchen Sie, den Wert einer Variablen zu dekrementieren..eine Variable, deren Wert niemals die von Ihnen angegebene Bedingung (i < 20) erreichen wird ... daher wird weiter '-' gedruckt, bis der angegebene Jamie-Wong, d i= -2^31. Es wird + ve. Ich habe gerade dieses Programm ausprobiert.

#include <stdio.h> 
int main() 
{ 
    int i; 
    int n = 20; 
    for(i = 0; i < n; i--) 
     printf("-"); 
    return 0; 
} 

Nach der Frage, die Sie gefragt, sollte i erhöht werden, das heißt i++ statt i--.

@jamie wong: Thanx eine neue Sache über tht man..learnt Umwickeltyps ....