Les boucles dans les sous programmes

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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. 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 !
    2. Contributeur
      @SugelYes, 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.
    3. la vache, je savais même pas :)
      Merci pour l'info !
    4. Merci pr vous conseil mais le s change avant de l'instruction s =s+a+b
    5. Contributeur
      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.