• # Peut-etre comme ca

    Posté par  . Évalué à 1. Dernière modification le 07 mars 2019 à 13:51.

    Le return index doit etre dans le if.
    Comme la mis à coté, ta boucle ne fait qu'un seul tour.

    De plus tu est censé renvoyer un int, pas un unsigned int(index)

    • [^] # Re: Peut-etre comme ca

      Posté par  . Évalué à 1. Dernière modification le 21 février 2020 à 16:21.

      #include <stdio.h>
      #include <stdlib.h>
      
      
      unsigned int index_last_occurrence(char tableau[], char lettre) {
      int size=6;
      unsigned int index=0, i;
      for(i=0;i<=size-1;i=i+1) {
      
      if (tableau[i]== lettre) {
      index=i+1;
      return index;
          }
      
      }
      
      
      return NONE;
      
      }
      
      int main(void) {
      char tableau[]={'a','n','a','n','a','s','\0'},lettre;
      int size=6;
      unsigned int position;
      printf("donner la lettre: ");
      scanf("%c",&lettre);
      position = index_last_occurrence(tableau, lettre);
      if(position > 0) {
          printf("Position: %i", position);
      } else {
          printf("Pas glop");
      }
      return EXIT_SUCCESS;
      }

      Bon c'est moche mais ca marche.
      Donc comme dit plus bas, tu de declare par i dans le for, le return dans le if, et tu incremente de 1 parceque ca compte à partir de zero.

      Ensuite quand tu appelle ta fonction index_last_occurrence(), il te faut aussi récuperer la valeur de retour!

      Et comme dit plus bas, strlen() et plus judicieux(faut inclure string.h)

  • # Relis le code...

    Posté par  . Évalué à 1.

    Pourquoi la fonction me renvoie toujours 0 ?

    Parce que tu initialises index à 0 à chaque tour de boucle.

    • Tip #1: il existe une fonction strlen pour connaitre la taille d'une chaîne de caractères, ce qui évite de coder la taille en dur, et de risquer un beau segfault le jour où tu passes une chaîne plus courte.
    • Tip #2: et si tu commençais par la fin de la chaîne? :-)
  • # dernière occurrence

    Posté par  . Évalué à 1.

    J'ai fais sa mais même problème pour le NONE alors que ma fonction retourne bien ce qu'il faut pour l'indice de la lettre…:

    include

    include

    ifndef NONE

    define NONE 0/*

    endif

    int index_last_occurrence(char tableau[], char lettre){
    int i=0;
    while(tableau[i]!='\0'){
    i++;
    }
    printf("la taille du tableau est: %d\n",i);

    int j;
    for(j=i-1;j>=0;j--){
        if(tableau[j]==lettre){
            printf("la derniere occurence de %c est à l'indice %d",lettre, j);
            return j;
        if(j==0){
            return NONE;
        }
        }
    }
    

    }

    int main(void) {
    char tableau[]={'a','n','a','n','a','s','\0'},lettre;
    printf("donner la lettre: ");
    scanf("%c",&lettre);
    index_last_occurrence(tableau, lettre);
    return EXIT_SUCCESS;
    }

    • [^] # Re: dernière occurrence

      Posté par  . Évalué à 1. Dernière modification le 07 mars 2019 à 14:47.

      Problème résolu, il faut juste sortir le return NONE de la boucle for.

  • # Int j

    Posté par  . Évalué à 1.

    Non sérieux,
    "int j" ca me rapelle trop une chanson des rolling stones, je l'ai dans la tête pour la journée :(

    Tu va finir par te faire griller par ton prof :)
    Et tu as un soucis avec tes return: si une function n'est pas void, tu récupère la valeur. Et après printf()

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.