2010-08-11 7 views
5

Possible en double:
Help with C puzzleQuel est le problème avec ce programme C

L'intention du programme était d'imprimer un signe moins 20 fois, mais il ne fonctionne pas.

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

Quelle est la sortie/erreur? – James

+1

il donne infinie signe moins ... – SurajRk

+4

Est-ce un problème de devoirs? –

Répondre

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

Vous avez eu -- au lieu de ++

+5

Yup, cette boucle va s'exécuter pour toujours parce que 'i' commence à' 0' et continue à devenir plus petit. Il ne sera jamais plus grand que * n *, donc la condition de sortie de la boucle ne sera jamais atteinte. – FrustratedWithFormsDesigner

+4

Sera sûrement plus grand que n quand l'entier s'enroule autour? La boucle fonctionnera juste un peu plus longtemps que prévu. – signine

10

Remplacer je-- avec i ++.

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

Vous avez décrémenté au lieu de l'incrément.

2

Avez-vous essayé de changer le

i-- 

à

i++ 

Vous avez la boucle pour imprimer un « - » aussi longtemps que « i » est inférieur à 20. Après chaque boucle vous réduire la valeur de i par 1, il continuera à imprimer pour une très longue période. Changer la dernière partie de la boucle for en «i ++» signifie qu'il effectuera une itération à chaque boucle et s'arrêtera une fois la vingtième itération terminée.

1

le je-- doit être i ++

vous pouvez aussi faire

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

mais qui est une mauvaise pratique de codage

+4

Pourquoi suggérer une mauvaise pratique de codage? –

+2

parce que dans d'autres situations, vous voulez décrémenter votre compteur. dans ce cas, décrémenter le compteur n'a pas de sens. – Forge

+2

@Jamie Creativity;) On peut apprendre même de quelque chose qui ne devrait pas être fait d'une manière particulière. –

-1

Vous imprimez pas des tirets. Vous pouvez aller avec la solution de Jaime Wong ou faire:

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

+0

Vous imprimerez tellement de tirets. De plus, c'est une façon terrible de le faire. Pas vraiment la norme, et est légèrement obscurément inutile. –

+4

Cela n'imprimera pas de tirets, comme tout le monde l'a expliqué. En outre, vous avez mal orthographié mon nom. –

+0

Oups, vous avez raison. Désolé à ce sujet, sur les deux points. –

2

changement je-- i ++. i-- décrémente la valeur qui au départ est 0 et les réductions suivantes n'atteindront jamais 20 (ou +20).

26

Ceci est un casse-tête classique!

La façon dont je l'ai vu était

« Vous ne pouvez modifier/insérer/supprimer un caractère dans le code pour faire la - imprimer 20 fois ».

Certaines réponses sont (si je me souviens les correctement)

1)

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

Ici vous changez le i < n--i < n

2)

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

Ici vous changez le i-- à n--

3)

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

Vous modifiez le i < n-i+n. Pour un défi, essayez de changer/insérer/supprimer un caractère pour l'imprimer - fois. (Ne lisez pas les commentaires à cette réponse si vous voulez l'essayer!)

+3

+1 pour en faire un casse-tête. Réponse bien pensée. –

+1

Le défi était amusant;) Content de ne pas avoir regardé les commentaires avant d'essayer d'y répondre. –

1

Qu'est-ce que vous essayez exactement de faire avec ce problème ??? Ici vous essayez de décrémenter la valeur d'une variable..une variable dont la valeur n'atteindra jamais la condition (i < 20) que vous avez fournie ... donc elle continuera à imprimer '-' jusqu'à ce que jamie wong spécifie, ie i= -2^31. Cela deviendra + ve. J'ai juste essayé ce programme.

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

Selon la question que vous avez posée, i doit être incrémentée, à savoir i++ au lieu de i--.

@jamie wong: Thanx man..learnt une nouvelle chose à propos tht un wraparound ....