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. 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
      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.