2010-03-31 4 views
-3

J'aide avec mon programme. Je suis obligé de créer une pyramide inversée d'étoiles dont les rangées dépendent du nombre d'étoiles que l'utilisateur clé, mais je l'ai fait pour ne pas donner une pyramide inversée, cela donne une pyramide régulière.Afficher une pyramide inversée d'astérisques

#include <stdio.h> 
#include <conio.h> 
void printchars(int no_star, char space); 
int getNo_of_rows(void); 
int main(void) 
{ 
    int numrows, rownum; 
    rownum=0; 
    numrows=getNo_of_rows(); 
    for(rownum=0;rownum<=numrows;rownum++) 
    { 
     printchars(numrows-rownum, ' '); 
     printchars((2*rownum-1), '*'); 
     printf("\n"); 
    } 
    _getche(); 
    return 0; 
} 

void printchars(int no_star, char space) 
{ 
    int cnt; 
    for(cnt=0;cnt<no_star;cnt++) 
    { 
     printf("%c",space); 
    } 
} 

int getNo_of_rows(void) 
{ 
    int no_star; 
    printf("\n Please enter the number of stars you want to print\n"); 

    scanf("%d",&no_star); 
    while(no_star<1) 
    { 
     printf("\n number incorrect, please enter correct number"); 
     scanf("%d",&no_star); 

    } 
    return no_star; 
} 
+0

Pour afficher le code dans une question stackoverflow.com, indentez le code d'au moins 4 espaces. – mob

+0

Fixez votre formatage de code s'il vous plaît. Assurez-vous que le code est indenté, et il sera formaté automatiquement. – rlotun

+2

Mettre un peu moins dans le titre ne ferait pas de mal non plus ... – ChristopheD

Répondre

4

Vos lignes s'affichent dans l'ordre inverse de la façon dont vous les voulez, n'est-ce pas? Donc ce que vous voulez faire est de regarder le code qui imprime les lignes:

for(rownum=0;rownum<=numrows;rownum++) 
{ 
    printchars(numrows-rownum, ' '); 
    printchars((2*rownum-1), '*'); 
    printf("\n"); 
} 

et comprendre comment le faire tourner en arrière. Ce code ci-dessus appelle printchars pour les lignes avec 2*rownum-1 étoiles jusqu'à 2*numrows-1 étoiles car rownum commence à 0 et compte jusqu'à numrows.

Comment pouvez-vous changer cela afin que vous fassiez rownum commencer à partir de numrows et comptez jusqu'à zéro à la place?

+2

apprendre à un homme à pêcher. – Banjer

+0

ouais ..... tanx v.much ...... ont travaillé sur – onyebuoke

2

Essayez de parcourir votre code manuellement, étape par étape.

Retirez du papier graphique.

Dites que votre entrée est 5. Juste en fonction de ce qui est dans votre liste (pas d'exécution), que dit-elle qu'elle va afficher à l'écran? Dessinez sur le papier millimétré.

Vérifiez si vous pouvez détecter l'erreur.

Quelques suggestions non sollicitées:

  • En utilisant numrows pour votre entrée et rownum pour votre index est source de confusion (et il est la source de votre erreur). Envisagez de rendre votre variable d'index plus distincte de votre entrée (peut-être rn). Envisagez d'être cohérent avec vos abréviations. Vous utilisez no_, No_of_ et num comme abréviation de "nombre de".
+0

tanx 4 d conseils .. – onyebuoke

Questions connexes