Comment faire un programme avec des ***

Résolu
Rmizoune Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
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

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
Rmizoune Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
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
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
Rmizoune Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
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