How Tall? 3 * ** ***
How tall 3? * * * * * * _| |_ \___/
et c'est ce que j'obtiens. Quel est le problème avec mon code? et comment vais-je corriger le code?
void printer(int input)
{
int star;
int space;
for (int i = 1; i <= input; i++)
{
star = i;
space = i + input - star - 1;
for (int j = 0; j < space; j++)
{
printf(" ");
}
for (int s = 0; s < star; s++)
{
printf("*");
}
printf("\n");
}
}
4 Réponses :
votre format est le problème. comme vous connaissez déjà la taille de l'arbre, vous pouvez déduire la taille du premier ensemble d'espaces (les premiers espaces sur chaque ligne), soit espaces = (taille - 1) - i . il devrait être, pour chaque i:
i1 = 2 i2 = 1 i3 = 0
qui semble être ce que le résultat donne. de plus, entre tous les astérisques, insérez simplement un espace jusqu'au dernier caractère, et c'est l'idée
Il y a trop de choses qui ont mal tourné avec cela. Je ne publierai pas le code correct, mais je pourrai vous guider à travers.
Puisque vous voulez de l'espace après les étoiles, imprimez "*" au lieu de "*"
Vous devez utiliser un espace décrémentiel au début, avant d'imprimer l'étoile, il y a un défaut logique à cela, c'est-à-dire que vous ajoutez et soustrayez i et étoile, qui sont la même chose. Vous devez donner des espaces (entrée - étoile) pour la boucle.
Pour le tronc, vous devez développer une logique symétrique. J'espère que cela vous aidera.
Essentiellement, cet extrait de code que vous utilisez ici:
* * * * * * _| |_ \___/
équivaut à écrire:
void printer(int input)
{
int star;
int space;
// Store the original length of the space
int space_length = input;
for (int i = 1; i <= input; i++)
{
star = i;
// Get the number of spaces for the current iteration
space = space_length - 1;
for (int j = 0; j < space; j++) {
printf(" ");
}
for (int s = 0; s < star; s++) {
printf("* ");
// ^ note this space after the asterisk
}
// Decrease the length of the space every step
// So that it appears like a slope
// Note how we are using 'space_length' instead of input
// This is because if we decrement 'input', this loop
// will get affected, which is not what we want
space_length--;
printf("\n");
}
///////// bottom part of the tree /////////
// number of spaces needed = input - length of "_| |_" - 1
for (int i = 1; i <= input - (4 - 1); i++)
printf(" ");
printf("_| |_\n");
// number of spaces needed = input - length of "\\___/" - 1
for (int i = 1; i <= input - (4 - 1); i++)
printf(" ");
printf("\\___/\n");
}
C'est parce que i et star ont la même valeur (quoth star = i ), et par conséquent, s'annulent mutuellement.
Maintenant, pouvez-vous voir une constante ici? Oui, la valeur de input n'est jamais modifiée nulle part, et donc votre code est toujours ce que 1 de moins que l'entrée. (Dans ce cas, il est toujours précédé de 2 ( = 3-1 ) espaces) comme ceci:
* ** *** ^^ mark two spaces
Et vous avez également oublié d'ajouter un espace de fin après l'astérix et il n'y a donc pas d'espacement entre eux.
Par conséquent, pour résoudre votre problème, vous pouvez stocker temporairement la valeur de input et la réduire de 1 à chaque itération pour qu'elle ressemble à une pyramide.
Exemple:
star = i; space = input - 1;
qui donne la sortie:
star = i; space = i + input - star - 1; // or, space = input - 1 + i - star;
Vous pouvez le faire comme ceci:
#include <stdio.h>
void printer(int input)
{
// for stars
for (int i = 1; i <= input; i++) {
for (int j = 1; j <= input - i; j++) {
printf(" ");
}
for (int k = 1; k <= i; k++) {
if (k == 1) printf("*");
else printf(" *");
}
printf("\n");
}
// for base
int base_half_len = input - 1;
for (int i = 1; i < base_half_len; i++) {
printf("_");
}
printf("| |");
for (int i = 1; i < base_half_len; i++) {
printf("_");
}
printf("\n\\");
for (int i = 1; i < 2 * input - 2; i++) {
printf("_");
}
printf("/\n");
}
int main(void) {
// your code goes here
printer(10);
return 0;
}
Voici le lien où je l'ai testé: https://ideone.com/7zpNeW
trouver le point médian et imprimer le coffre
ne publiez pas d'images de code. Postez le code.