Comment faire un programme avec des ***

Résolu
Rmizoune Messages postés 9 Statut Membre -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour je suis nouveau dans comment ca marche et je vous demande une petite quéstion sur un programme que j'ai tapé mais il y a un problème l'énoncé dis :
Ecrire un programme qui dessine un cadre en caractère * de largeur X et de hauteur Y. Ces valeurs
seront entrées au clavier. Exemple :
X= 5
Y= 7
donne
*****
* *
* *
* *
* *
* *
*****

A la fin merci beaucoup si vous répondez j'att vos réponse avant le vendredi merci bcp

2 réponses

  1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
     
    Bonjour, vous pouvez n'utiliser qu'un seul tableau je trouve que c'est plus simple ainsi. Exemple :

    int main()
    {
        //Declaration des variables :
        int i, j, p=0, x=0, y=0;
        char *buff, as='*';
        size_t taille_buff;
    
        //La saisie :
        system("color f1");
        printf("Largeur : ");
        scanf ("%d",&x);
        printf("Hauteur : ");
        scanf ("%d",&y);
    
        taille_buff=x*y+y; //+y pour le saut \n ajouté en fin des lignes
        buff=(char*)malloc(taille_buff); //alloue la mémoire
    
        for(i=0;i<y;i++) //y
        {
            for(j=0;j<x;j++) //x
            {
                if((!i)||(i==y-1)) buff[p]=as; //premiere ligne ou derniere
                else if((!j)||(j==x-1)) buff[p]=as; //premier char ou dernier
                else buff[p]=' ';//le centre
                p++;//position dans buff
            }
            buff[p]='\n'; p++;//fin de ligne
        }
        buff[taille_buff-1]='\0';//dernier caractere qui est un \n devient un \0
    
        printf("%s",buff); //affichage
        free(buff); //libère la mémoire
    
        return 0;
    }
    
    0
  2. Rmizoune Messages postés 9 Statut Membre
     
    Merci beaucoup Hxyp je veux juste savoir a quoi ca sert c 2 truc :
    char *buff, as='*';
    size_t taille_buff;

    buff que j'ai pas compris mais je c que ta déclarer un tableau je pense
    0
    1. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
       
      Désolé du retard à vous répondre, en fait j'avais répondu mais il semble que je n'avais pas valider la prévisualisation de ma réponse... ahahah
      Alors oui il y a bien un tableau, la ligne
      char *buff, as='*';
      revient à faire : char *buff; char as='*';
      char *buff; c'est un pointeur ce qui veut dire qu'il doit pointer vers un bloc mémoire pour être utilisé comme un tableau avec les [ ] -> buff[i]. Vu qu'on ne connait pas la taille de nôtre tableau avant la compilation on va allouer de la mémoire d'une façon dynamique et récupérer le pointeur qui en découle.
      La fonction malloc(size_t size) nous fait ça, elle prend en paramètre un size_t c'est pourquoi j'ai utilisé size_t taille_buff; pour passer la taille à allouer du tableau à malloc. Une fois que malloc à réussi à allouer un bloc mémoire à la taille désirée (taille_buff) il renvoit le pointeur vers celui-ci.
      buff=(char*)malloc(taille_buff); buff récupère le pointeur donné par malloc, le (char*) c'est un cast car malloc retourne un void et comme buff est un char*...
      Après ça buff devient un tableau identique à un :
      char buff[taille_buff];

      malloc : http://www.cplusplus.com/reference/cstdlib/malloc/
      0
    2. Rmizoune Messages postés 9 Statut Membre
       
      Merci beaucoup
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Hxyp,
      le (char*) c'est un cast car malloc retourne un void et comme buff est un char*...
      Juste pour info, malloc retourne un void* et non un void. Et il n'y a pas besoin de caster, le cast est implicite : particularité de void*. Le cast était obligatoire en pré-ansi où le type générique void* n'existait pas.

      Cdlt,
      0
    4. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
       
      Salut fiddy,
      Oui un void* pardon de l'erreur et pour le cast aussi en fait j'avais eu :
      error: invalid conversion from 'void*' to 'char*'
      mais n'avais pas fait attention en utilisant un .cpp et non un .c
      0