Les boucles dans les sous programmes

skandermouna Messages postés 5 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
voici mon prog.
#include<stdio.h>

    int a=5;
    int b=8;

int test(int a,int b)
{
   int i;
int s=0;
   for(i=1;i<=50;i++)
{
printf ("%d \n",s);
       s=s+(a+b);
    }

return s ;
}
void main ()
{
    printf("%d",test(a,b));

}

le variable s avant la boucle 0 mais lors n entre dans la boucle elle change de valeur .
Est-ce que c un prob dans la mémoire ou dans la boucle .
merci d'avance :)

EDIT: Ajout de la coloration syntaxique.

Rosa La Signorita

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Pourquoi enlever le "Bonjour" mis en place automatiquement ???

    Sinon, plein d'erreurs dans le code :

    void main()
    Non standard. On utilise plutôt : int main(void)
    De fait, il ne faut pas oublier : return 0; en fin de main().

    printf("%d",test(a,b));
    N'oublie pas de flusher la sortie avant la fin. Je te conseille donc plutôt de mettre : %\n.

    int a=5;
    int b=8;

    Évite les variables globales. Surtout si c'est pour les envoyer en paramètres de fonction. Sinon, tu te mélangeras les pinceaux.
    Mets donc plutôt int a=5; et int b=8; dans ton main().

    for(i=1;i<=50;i++)
    Ce n'est pas une erreur, mais pour éviter que tu la fasses dans le cas de tableaux, je la signales quand même : en C, on commence à 0.
    Donc plutôt : for(i=0;i<50;i++)

    Sinon, pour ta question, c'est normal que s change de valeur.
    Si ça ne changeait pas de valeur, quel serait l'intérêt de l'afficher plusieurs fois de suite ? C'est le code s=s+(a+b); qui change la valeur de la variable.

    Cdlt,
    1
    1. Sugel Messages postés 4293 Date d'inscription   Statut Membre Dernière intervention   728
       
      Réponse aussi complète que toujours ;-)

      Juste:
      "N'oublie pas de flusher la sortie avant la fin. Je te conseille donc plutôt de mettre :
      %\n
      . "

      Tu voulais sûrement dire
      %d\n
      , ce qui donne:
      printf("%d\n",test(a,b)); 


      Cela rajoute en fait un caractère de retour à la ligne de sorte que les prochains caractères affichés le soient sur la ligne suivante.
      Cela évite des aberrations d'affichage; ceux qui utilisent linux couramment ne le savent que trop bien !
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Sugel Messages postés 4293 Date d'inscription   Statut Membre Dernière intervention  
       
      Yes, bien évidemment, c'est "%d\n" que je voulais mettre :-).

      Cela rajoute en fait un caractère de retour à la ligne de sorte que les prochains caractères affichés le soient sur la ligne suivante.
      Cela a surtout pour but de forcer l'affichage du buffer écran. On a ainsi la garantie que le nombre soit affiché. Après, effectivement, c'est mieux de mettre un '\n' qu'un fflush(stdout) en fin de programme pour les problèmes que tu as cités.
      0
    3. Sugel Messages postés 4293 Date d'inscription   Statut Membre Dernière intervention   728
       
      la vache, je savais même pas :)
      Merci pour l'info !
      0
    4. skandermouna Messages postés 5 Statut Membre
       
      Merci pr vous conseil mais le s change avant de l'instruction s =s+a+b
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Non, le s change après l'instruction.
      Donc, tu auras s=0, puis s=13, s=26, ainsi de suite.
      Si tu n'as pas ça, recompile-le. Si ça ne marche toujours pas, recréée un programme et profites-en pour le corriger comme dit plus haut.
      0