Problèm de trier un tableau par ordre croissant en C

Bonjour, je suis débutant en C. J’aimerais solliciter votre aide pour ma compréhension. Il est facile de faire appel à une fonction après la déclaration d’un tableau. Exemple :

[On suppose que le prototype est correctement placé]
[là on est dans le main]

int tableau[6]={5,2,6,1,4,3,};
croissant(tableau,6);
[Ici, le classement par ordre croissant apparaît correctement] → 1,2,3,4,5,6

En dessous c’est la Fonction :

int croissant(int tab[], int tailleTab)
// on suppose ici que la fonction est détaillé, et qu’elle a pour rôle de classer les nombres dans l’ordre croissant

Jusque là tout fonctionne correctement. Mais si j’essaye de faire rentrer les valeurs d’un tableau, une à une par saisie (scanf). Et qu’après je remette comme avant la fonction. Celle-ci ne s’affiche pas. Je n’arrive pas à comprendre pourquoi ?

Voir détail de mon programme.

#include <stdio.h>
#include <stdlib.h>
int croissant(int tab[],int tailleTab);

/--------------------- MAIN ------------------------/

int main(int argc, char *argv[])
{

int tableau[6]={0};

printf(« \nEntrez la valeur du 1er nombre : « );
scanf( »%d », &tableau[0]);

printf(« \nEntrez la valeur du 2e nombre : « );
scanf( »%d », &tableau[1]);

printf(« \nEntrez la valeur du 3e nombre : « );
scanf( »%d », &tableau[2]);

printf(« \nEntrez la valeur du 4e nombre : « );
scanf( »%d », &tableau[3]);

printf(« \nEntrez la valeur du 5e nombre : « );
scanf( »%d », &tableau[4]);

printf(« \nEntrez la valeur du 6e nombre : « );
scanf( »%d », &tableau[5]);

printf(« \n »);

croissant(tableau,6);

return 0;
}

/-------------------- FONCTION ---------------------/

int croissant(int tab[], int tailleTab)
{
int var, i, somme = 0;

while(var<somme || var==somme){
	for(i=0; i<tailleTab; i++)
	{
	  somme+=tab[i];
	  if(var == tab[i]){printf("%d", tab[i]);}
	}

	var++;
}

}

ici, vous ne calculez que la somme des valeurs du tableau, et donc votre code ne fait pas le tri.

Le compilateur ne fait pas entrer dans la boucle while parce que la variable var n’est pas initialisé.

Voici une version de votre code améliorer:

#include<stdio.h>


/* Le Prototype de la fonction croissant */
void croissant(int tableau[100], int n);

void main()
{
 int tableau[100], i, n;
 
 printf("Entrez le nombre de valeurs du tableau: ");
 scanf("%d", &n);
 
 /* Lire le tableau */
 for(i=0;i< n;i++)
 {
  printf("tableau[%d]=",i);
  scanf("%d", &tableau[i]);
 }
 
 /* Appel à la fonction croissant*/
 croissant(tableau,n);
 /* Afficher le tableau trié */
 printf("Le tableau dans l ordre croissant est:\n");
 for(i=0;i< n;i++)
 {
  printf("%d\t", tableau[i]);
 }
 
}


/* Définition de la fonction croissant */
void croissant(int tableau[10], int n)
{
 int i, j, temp;
 for(i=0;i< n-1;i++)
 {
  for(j=i+1;j< n;j++)
  {
   if(tableau[i]>tableau[j])
   {
    temp = tableau[i];
    tableau[i] = tableau[j];
    tableau[j] = temp;
   }
  }
 }
}

Sortie:

Je te remercie pour ton aide et ton explication :+1:
Ton code m’impressionne :clap:
Je vais prendre le temps de bien assimiler tout ça :slight_smile:
Encore merci.

Essayez d’appliquer un des algorithmes de tri suivant dans la fonction croissant():

Merci beaucoup pour ces précieux conseils :pray: (je le pense vraiment)
Je vais étudier cela avec soin.
Je salue au passage la gentillesse des membres de ce forum, ainsi que les conseils et la qualité d’informations. C’est grâce à vous tous que je vais m’améliorer. Et quand je vois le niveau général (comparé au mien :smiling_face:), je me dis que c’est bon pour mon humilité :slight_smile: