Les boucles dans les sous programmes

skandermouna Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 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

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
Sugel Messages postés 4076 Date d'inscription   Statut Membre Dernière intervention   727
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Sugel Messages postés 4076 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
Sugel Messages postés 4076 Date d'inscription   Statut Membre Dernière intervention   727
 
la vache, je savais même pas :)
Merci pour l'info !
0
skandermouna Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pr vous conseil mais le s change avant de l'instruction s =s+a+b
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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