2010-01-31 17 views
0

J'ai une tâche pour l'école qui a vraiment le meilleur de moi-même.Impression d'un motif avec boucles While et utilisation uniquement de trois instructions de sortie dans C

Voici la question:

(2) Ecrire un programme C en utilisant while (s) en combinaison avec seulement le suivant trois instructions de sortie (chacune apparaissant seule fois dans votre programme ): printf ("*"); printf ("\ n"); printf ("^"); pour imprimer le motif:

* * * * * * * *^
* * * * * * * * 
* * * * * * * *^
* * * * * * * * 
* * * * * * * *^
* * * * * * * * 

Note: il y a un espace entre chaque * et les premier, troisième et cinquième lignes ont un espace avant le ^.

Et voici mon code:

#include<stdio.h> 

int main() { 

int star = 0; 
int row = 1; 
int hat = 1; 

while(row < 6) { 

    printf(" *"); 
    star++; 

    while(star > 8) { 

    while((hat % 2) == 1) { 

    printf(" ^"); 
    } 

    printf("\n"); 
    row++; 
    } 
} 
    return 0; 
} 

J'ai essayé beaucoup de versions différentes de ce code, et la plupart d'entre eux se sont retrouvés avec des lignes infiniment d'impression de *. Si quelqu'un pouvait l'aider, ce serait génial car j'ai essayé et essayé pendant un certain temps maintenant et même si je voudrais pouvoir continuer à essayer les délais sont des délais et ils semblent toujours aller trop vite.

Merci

EDIT:

Rev.2 du code:

include<stdio.h> 

int main() { 
int star = 0; 
int row = 1; 
int hat = 0; 

while(row <= 6) { 

    printf(" *"); 
    star++; 

    while(star >= 8) { 
     hat++; 

     if((hat % 2) == 1) { 
      printf(" ^"); 
      hat++; 
     } 

     printf("\n"); 
     row++; 
     star = 0; 
    } 
} 
return 0; 
} 

Espérons que je suis les boucles se termine correctement, mais il ne semble pas fonctionner. Je ne demande pas de carte "sortir de prison", mais tout le monde est le bienvenu.

Répondre

-1

Ma réponse est ici

#include<stdio.h> 

int main() { 
    int row = 0; 
    int hat = 0; 
    while(row < 6) { 
      int col = 0; 
      while(col < 8) { 
       printf("* "); 
       col++; 
      } 
      while((hat % 2) == 0) { 
       printf("^"); 
       hat++; 
      } 
      printf("\n"); 
      row++; 
      hat = row; 
    } 
} 
+0

Il semble que je voulais sur tout nid, Merci à tout le monde. – Craig

+1

Donner une solution complète sans commentaire est-il vraiment une bonne chose pour une question de devoirs? @Craig, cela peut fonctionner, mais comprenez-vous ce qui ne va pas avec vos propres solutions non fonctionnelles? – Secure

+0

@Secure, Avez-vous vraiment besoin de commentaires pour un tel code auto-descriptif? Au moment où j'ajoutais du code, les gens avaient déjà fourni des commentaires sur le problème. – rajeshnair

2

Le premier problème est dans ce bloc:

while(star > 8) { 

    while((hat % 2) == 1) { 

    printf(" ^"); 
    } 

    printf("\n"); 
    row++; 
    } 

Vous ne réinitialiser star lors du passage à la ligne suivante.

En outre, je ne vois pas vous incrémentant hat n'importe où.

Je suis surpris que vos étoiles impriment infiniment - puisque hat commence à 1 et ne change pas à l'intérieur de cette boucle while, cette boucle ne devrait jamais se terminer.

Un autre problème - star compte le nombre d'étoiles que vous avez déjà imprimé, non? Donc, vous ne voulez que 8 étoiles par ligne, mais en attendant star > 8 vous permettra d'imprimer 9 par ligne.

2

Juste un indice:

while((hat % 2) == 1) { 

devrait être un if() et devrait être placé ailleurs dans votre programme.

0

hat est fixé, c'est-à-direpas incrémenter partout et star est de ne pas être remis à zéro à chaque fois dans la boucle ... Je l'ai mis en évidence les lignes problématiques ...

 
while(row < 6) { 

    printf(" *"); 
    star++; 

    while(star > 8) { 

    while((hat % 2) == 1) { // since hat = 1, 1%2 == 1 is true.... 

    printf(" ^"); 
    } 

    printf("\n"); 
    row++; 
    } 

    star = 0; // !!! 

} 

Hope this helps, Meilleures salutations, Tom.

0

Lorsque vous avez un infini en boucle, puis vérifiez vos boucles pour ce modèle:

var = inital value; 
while (var has not exitcondition) 
{ 
    .... 
    var = modify value; 
} 

La cause habituelle d'une boucle infinie est que la modification du var est pas dans la boucle, donc var sera jamais atteindre la condition de sortie.

Questions connexes