IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Occurences dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut Occurences dans un tableau
    Bonjour,

    Soit 5 fichiers placés sous /tmp, portant les noms suivants : J0, J1, J2, J3, J4, J5
    Dans chaque fichier est écrit les valeurs suivantes :
    18
    12

    Voici le code source qui calcule le nombre d'occurences d'un entier saisi par l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #include <stdlib.h>
    #include <stdio.h>
     
    #define SIZE 4
     
    int main()
    {
    	int j, cpt, number1, number2;
    	int obs; 
    	int tab[4];
    	int smax = sizeof tab/ sizeof * tab;
    	char filename[3];
    	FILE *file; 
     
    	for(j = 0; j <= SIZE; j++) 
    	{
    		sprintf(filename,"/tmp/J%d",j);
    		if ((file = fopen ( filename, "r" )) == NULL)
    		{
    			perror ("Impossible d'ouvrir le fichier.");
    		}
    		else
    		{
    			while ( fscanf ( file, "%d %d", &number1, &number2 ) == 2) 
    			tab[j] = number2;
    			printf("tab[%d] = %d\n", j, tab[j]);
    			fclose (file);
    		}
    	}
    	printf("Numéro à compter ? ");
    	scanf("%d",&cpt);
     
    	/* compteur */
    	obs = 0;
    	for(j = 0; j <= smax; j++) 
    	{
    		printf("tab[%d] = %d\n", j, tab[j]);
    		if(tab[j] == cpt) 
    		{
    			obs = obs + 1;
    		}
    	}
    	printf("Total : %d\n", obs);
    	return EXIT_SUCCESS;
    }
    La sortie est la suivante :

    tab[0] = 12
    tab[1] = 12
    tab[2] = 12
    tab[3] = 12
    tab[4] = 12
    Numéro à compter ? 12
    tab[0] = 877277040
    tab[1] = 0
    tab[2] = 12
    tab[3] = 12
    tab[4] = 12
    Total : 3

    Pourquoi mon tableau est-il modifié ?

    Merci bien

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Si tu as 5 fichiers il faut faire SIZE = 5

    Il faut faire j < SIZE et j < smax car comme tu le vois tu as un tableau de 4 valeurs (int tab[4]) et tu en affiches 5 (de 0 à 4 ça fait 5 !!)
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    De plus, tu n'a pas assez de place dans filename.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /* trois caractères pour filename (soit 2 caractères plus le '\0' final */
    char filename[3];
    /* Ici, on écrit au moins 8 caractères */
    sprintf(filename,"/tmp/J%d",j);
    Agrandi filename. Donne lui une grande taille (genre 64 octets) pour être tranquille.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Ah le bourrin !!

    Pourquoi pas 7 ?

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par sneakz Voir le message
    Pourquoi pas 7 ?
    Tu me copieras 100 fois "une chaine de caractère se termine pas un '\0'"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Par défaut
    Merci Trap D.
    Merci mabu pour ce rappel à l'ordre !! je ne ferai plus cette erreur.

    Désolé de vous avoir sollicité pour si peu !

    Merci à tous les 2 pour votre réactivité

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/07/2008, 03h16
  2. Occurence dans un tableau
    Par french_aspi dans le forum MATLAB
    Réponses: 22
    Dernier message: 02/07/2008, 15h36
  3. Compter les occurences dans un tableau trié
    Par degseb dans le forum Pascal
    Réponses: 2
    Dernier message: 10/01/2008, 16h34
  4. Compter le nombre d'occurence dans un tableau
    Par titou250 dans le forum Excel
    Réponses: 2
    Dernier message: 08/01/2008, 16h25
  5. Relevé des occurences dans un tableau
    Par jjg65 dans le forum C++
    Réponses: 1
    Dernier message: 16/08/2006, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo