Problème dans la boucle for.

Résolu
Bonsoir, je souhaite afficher le contour d'un rectangle de taille N*M; mon programme ne fonctionnait pas correctement jusqua ce que je retire les acolades {} de ma dernière boucle for (que jai surligne en gras) dans mon code. Maintenant il fonctionne mais je n'ai toujours pas compris la subtilité entre: for (...) {instruction}
et for(...) instruction

Voici mon code:

#include <iostream>
using namespace std;

int main(void)
{
int i, j, longueur, hauteur;
cout<<"entrez la longueur du rectangle"<<endl;
cin>>longueur;
cout<<"entrez la hauteur du rectangle"<<endl;
cin>>hauteur;
for (i=0;i<longueur;i++)
cout<<"*";
cout<<endl;
for (i=1;i<hauteur-1;i++)
{
cout<<"*";
for (j=1;j<longueur-1;j++)
{
cout<<" ";
}
cout<<"*";
cout<<endl;

}
for (i=0;i<longueur;i++)

cout<<"*";
cout<<endl;


return 0;
}

Jespere avoir été suffisament clair pour que vous puissiez m'expliquer. Merci d'avance.

3 réponses

  1. Modérateur
    Salut,

    quand je mets les accolades autour des 2 instructions jai une ligne verticale d'étoiles; et quand je ne mets pas les acolades jai une ligne horizontale.

    Oui c'est ça.

    avec accolades
    i égal 0
    for vérifie la condition
    si ok
    écrit une *
    écrit un saute de ligne
    i est incrémenté

    i égal 1
    for vérifie la condition
    si ok
    écrit une *
    écrit un saute de ligne
    i est incrémenté

    i égal 2
    .
    .
    .
    jusqu'à quand i égal longueur

    Ce qui donne ça
    *
    *
    *

    Sans accolades

    i égal 0
    for vérifie la condition
    si ok
    écrit une *
    i est incrémenté

    i égal 1
    for vérifie la condition
    si ok
    écrit une *
    i est incrémenté

    i égal 2
    .
    .
    .
    jusqu'à quand i égal longueur

    A la fin écrit un saut de ligne

    Ce qui donne ça

    ********

    1. Merci bcp lami20j d'avoir pris le temps de me répondre. Je comprends mieux maintenant, enfaite quand je mets les accolades autour des 2 instructions jai une ligne verticale d'étoiles; et quand je ne mets pas les acolades jai une ligne horizontale.
      1. Modérateur
        Salut,

        SI j'ai bien compris c'était comme ça avant?
        for (i=0;i<longueur;i++)  
        {  
        cout<<"*";  
        cout<<endl;  
        }


        En ce cas les instructions sont écrit jusqu'à quand i égal avec la longueur.
        A chaque passage dans la boucle le programme écrire un * suivi d'un fin de ligne

        for (i=0;i<longueur;i++) 
        
        cout<<"*"; 
        cout<<endl;  
        

        Dans ce cas c'est seulement l'écriture du * qui se fera jusqu'à quand i égal longueur
        Ensuite un saut de ligne sera écrit.

        Si pour for il n'y a qu'un instruction alors les accolades ne sont pas obligatoires.
        for(...) 
           instruction1;


        ou

        for(...) 
        { 
          instruction1; 
        }
        c'est la même chose

        En revanche s'il y a plusieurs instructions les accolades sont obligatoires
        for(...) 
        { 
           instruction1; 
           instruction2; 
        
        
           instructionN; 
        } 
        

        Si on ne mets pas les accolades alors on est dans le cas
        for(...) 
           instruction1;

        lami20j