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 :

débutant - Problème programme C sous windows


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Par défaut débutant - Problème programme C sous windows
    Bonjour,
    voilà j'ai un petit problème, je me suis fais un petit programme en C, qui suivant une effectif dans un tableau devrait me renvoyer le pourcentage que représente une valeur sur le total du tableau.

    Par exemple, si j'ai un tableau avec comme valeurs 500, 100, 300, 50, 50 il devrait me renvoyer 50%, 10, 30, 5, 5.

    Seulement au moment où je lance le programe windows me met le message d'erreur : xxxxxx.exe a rencontré un problème et doit fermer. Enfin le message d'erreur microsoft quoi !!! je comprend voilà le script :

    Si quelqu'un peut m'aider... merci beaucoup...

    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
    #include <stdio.h>
     
    void affichage(int n, int t[])
    {
        for(int i=0; i<n ; i++)
        {
            printf("%d --> %d",i,t[i]);
        }
    }
     
    void saisie(int n, int t[])
    {
        printf("Tableau :");
        for(int i=0; i<n ; i++)
        {
            scanf("%d",&t[i]);
        }
    }
     
    void pct(int n, int t[],int c[])
    {int s=0;
        for(int i=0; i<n ; i++)
        {
            s=s+t[i];
        }
        for(int i=0; i<n ; i++)
        {
            c[i]=t[i]*100/s;
        }
    }
     
    int main()
    {int n; int t[n]; int c[n];
        saisie(n,t);
        pct(n,t,c);
        affichage(n,t);
        affichage(n,c);
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Bonsoir,

    1) Avant de compiler un programme, bien configurer son compilateur.
    2) Une fois le compilateur bien configuré, lire les avertissements et les messages d'erreur, en tenir compte et corriger le programme en conséquence jusqu'à ne plus en avoir un seul (cela éliminera bien des problèmes).
    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
    $ gcc -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes -o t295322 t295322.c 
    t295322.c: In function `affichage':
    t295322.c:5: error: 'for' loop initial declaration used outside C99 mode
    t295322.c: In function `saisie':
    t295322.c:14: error: 'for' loop initial declaration used outside C99 mode
    t295322.c: In function `pct':
    t295322.c:22: error: 'for' loop initial declaration used outside C99 mode
    t295322.c:26: error: redefinition of 'i'
    t295322.c:22: error: previous definition of 'i' was here
    t295322.c:26: error: 'for' loop initial declaration used outside C99 mode
    t295322.c: At top level:
    t295322.c:33: warning: function declaration isn't a prototype
     
    $ gcc -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes -std=c99 -o t295322 t295322.c 
    t295322.c:33: warning: function declaration isn't a prototype
    t295322.c: In function `main':
    t295322.c:33: warning: 'n' might be used uninitialized in this function
    3) Deux prototypes possibles pour la fonction "main" :OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main ( int argc, char *argv[] );
    "int main()" n'est pas une de ces deux possibilités.

    Cordialement,
    DS.

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(int i=0; i<n ; i++)
    {
    on ne peut pas faire ça en C mais en C++ oui donc le fichier du code source doit avoir .cpp donc pedro134 utilise la bonne terminologie merci

    Si tu as un plantage apprends aussi à utiliser le déboguer intégré à ton compilateur ; c'est surement un dépassement de tableau à vue de nez

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par Mat.M
    [...] c'est surement un dépassement de tableau à vue de nez
    A vue de compilateur, je dirai plutôt accès à une zone indéterminée de la mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t295322.c:33: warning: 'n' might be used uninitialized in this function
    (car on ne peut pas vraiment avoir un "dépassement de tableau" si ce dernier n'a pas de taille...mais ça devient philosophique là...).

  5. #5
    Membre éprouvé
    Inscrit en
    Décembre 2006
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 103
    Par défaut
    D'après ce que je sais, en C on ne peut utiliser une variable pour définir un tableau.
    Donc la déclaration des tableaux est fausse.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par 30barrett40
    D'après ce que je sais, en C on ne peut utiliser une variable pour définir un tableau.
    Donc la déclaration des tableaux est fausse.
    En fait, en C99, il est possible d'utiliser une variable pour définir la taille d'un tableau [1] MAIS il faut que cette variable soit initialisée...sinon le comportement est indéterminé...

    Cordialement,
    DS.

    [1] Et même la valeur retournée par une fonction. Exemple :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* ... */
     
    void maFonction( char *chaine ) {
        int tableau[strlen(chaine)];
        /* ... */
    }
     
    /* ... */

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Citation Envoyé par David.Schris
    A vue de compilateur, je dirai plutôt accès à une zone indéterminée de la mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t295322.c:33: warning: 'n' might be used uninitialized in this function
    (car on ne peut pas vraiment avoir un "dépassement de tableau" si ce dernier n'a pas de taille...mais ça devient philosophique là...).
    Pareil, n n'est pas initialisée quand tu l'appelles dans saisie(...)

Discussions similaires

  1. [SNMP] Problème de requêtes sous Windows
    Par weib dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/11/2005, 19h00
  2. Problème pare-feu sous Windows
    Par colomban dans le forum Sécurité
    Réponses: 3
    Dernier message: 30/09/2005, 09h50
  3. [TP7] Problème de OutTextXY sous Windows XP
    Par Trash_men dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 03/09/2005, 18h29
  4. [PostGres] Problème installation PostGres sous Windows
    Par Torpille dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/08/2004, 16h05
  5. [Débutant] Problème d'installation sous Windows 2000
    Par bavmorda dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 04/08/2004, 16h28

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