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 :

probleme de segmentation


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut probleme de segmentation
    bonjour a tous,
    je suis une nouvelle inscrite ici, et je suis nouvelle dans la programmation, et l'un de mes premiers programmes en c ne fonctionne pas! je voudrais savoir pourquoi?(je travaille sous windows xp)
    merci de votre aide .
    voila mon programme:
    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
      # include<stdio.h>
      # include<stdlib.h>
       # define N 10
                main (void)
                {
                     int T[N];
                     int i;
                       printf("donnez %d nombres entiers:\n",N);
     
     
                     for (i = 0; i < N; i++)
     
                       scanf("%d",T[i]);
     
                       printf("Nombre     Carré\n");
                     for (i=0;i<N;i++)
                      printf("%d          %d\n",T[i],T[i]*T[i]);
                     system("pause");
                return 0;
                }

  2. #2
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Voilà la ligne coupable:
    Pour pouvoir charger la valeur saisie dans T[i], la fonction scanf() a besoin de connaitre son adresse en mémoire. Il faut donc lui passer l'adresse de T[i], de la manière suivante:

  3. #3
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Je ne reviendrai pas sur l'erreur (qui vient bien du scanf) mais sur deux choses. Comme tu débutes, il faut prendre de bonnes habitudes.

    Tout d'abord, ton erreur aurait pu être détectée à la compilation, en effet, lorsque je compile le programme sur ma machine j'ai ceci :

    warning: format '%d' expects type 'int *', but argument 2 has type 'int'
    Il faut donc absolument que tu configures ton compilateur pour lui faire afficher le maximum de message d'erreur et d'avertissement.

    Ensuite, il y a une deuxième chose : la construction de ta fonction main, elle doit retourner un entier, il faut donc que tu lui précises. Par exemple ce genre de warning peut te mettre la puce à l'oreille :

    warning: return type defaults to 'int'
    D'ailleur au passage, pour le retour, préfère return EXIT_SUCCESS à la place du return 0.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    De plus, sache que conseiller la fonction scanf() aux débutants est une pratique d'un autre âge : Cette fonction n'est pas une fonction pour les débutants et est assez difficile à utiliser correctement.
    Préfère-lui la fonction fgets() pour lire une chaîne de caractères sur l'entrée standard et la fonction strtol() pour la convertir en entier.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Salut
    C'est pas très pratique là de plus. Pourquoi ne pas inclure math.h et utiliser la fonction sqrt() ? Tu devrais aussi prendre l'habitude d'indenter ton code, soit en utilisant un éditeur qui le fait pour toi (comme Vim) soit en utilisant un prog qui peut le faire pour toi (comme GNU Indent).

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Pourquoi ne pas inclure math.h et utiliser la fonction sqrt() ?
    Parce que ça ne répond pas au problème ! Le programme affiche les carrés des nombres entrés, pas leur racine ...

    soit en utilisant un éditeur qui le fait pour toi (comme Vim)
    Ca existe sous windows ? (en natif, j'entend bien, pas en installant cygwin ou des outils de ce genre ...) En plus, ça n'est pas l'éditeur le plus convivial qui soit ...

  7. #7
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Citation Envoyé par PRomu@ld
    Parce que ça ne répond pas au problème ! Le programme affiche les carrés des nombres entrés, pas leur racine ...
    Pardon là j'avoue il était un peu trop tot pour moi encore. J'ai vu ça après mais bon...C'était pour voir si tu suivais

    Ca existe sous windows ? (en natif, j'entend bien, pas en installant cygwin ou des outils de ce genre ...) En plus, ça n'est pas l'éditeur le plus convivial qui soit ...
    J'utilise Vim là sous Windows et je n'ai pas installer de lib cygwin ou autre. Ca fonctionne bien comme ça. L'apprentissage est pas facile au début mais ça vaut vraiment le coup à la fin

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par PRomu@ld
    Ca existe sous windows ? (en natif, j'entend bien, pas en installant cygwin ou des outils de ce genre ...)
    http://www.vim.org/download.php#pc

    Citation Envoyé par PRomu@ld
    En plus, ça n'est pas l'éditeur le plus convivial qui soit ...
    C'est un euphémisme
    Notepad2 fait ça très bien

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si on rentre dans les discussion sur les éditeurs:
    • Unixoïde, mode console : vi (connais pas le fonctionnement/l'interface de vim).
    • Unixoïde, mode graphique : nedit
    • Windows : Un EDI ou UltraEdit


    PS: Pour le carré d'un entier, je pense que la bête multiplication est préférable aux fonctions de math.h qui utilisent des flottants...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lorie75
    j<...> l'un de mes premiers programmes en c ne fonctionne pas! je voudrais savoir pourquoi?(je travaille sous windows xp)
    • Ta présentation est horrible !
    • scanf() attend l'adresse d'un int.
    • En C99, les types retournés par les fonctions doivent être explicites.
    • Je recommande l'usage systématique des {} dans les structures de code.
    • le system("pause"); de la fin est inutile si tu utilises autre chose que Dev-C++ (Code::Blocks, par exemple)

    Ton code corrigé :
    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #define N 10
     
    int main (void)
    {
       int T[N] = {0};
       int i;
       printf("donnez %d nombres entiers:\n", N);
     
       for (i = 0; i < N; i++)
       {
          scanf("%d", T + i);
       }
       printf("Nombre Carre\n");
       for (i = 0;i < N;i++)
       {
          printf("%6d %5d\n", T[i], T[i]*T[i]);
       }
       return 0;
    }
    Nota. Il est déconseillé d'utiliser scanf() si on ne le maitrise pas. (tapes a<enter> pour voir...). Je recommande une combinaison de fgets() et de la ou les fonctions de nettoyage et/ou de conversions qui vont bien.

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    A lire et poser des questions si tu ne comprends pas.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    le system("pause"); de la fin est inutile si tu utilises autre chose que Dev-C++ (Code::Blocks, par exemple)
    Ca n'est pas portable non plus ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%6d %5d\n", T[i], T[i]*T[i]);
    Pourquoi affecter 6 pour le nombre et 5 pour son carré ? Le contraire aurait été plus judicieux, on a en effet :


  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par lorie75
    je suis une nouvelle inscrite ici, et je suis nouvelle dans la programmation, et l'un de mes premiers programmes en c ne fonctionne pas! je voudrais savoir pourquoi?(je travaille sous windows xp)
    Citation Envoyé par Emmanuel Delahaye
    • Ta présentation est horrible !...
    la Pauvre ! Mais je trouve pas ça si horrible que ça.
    Juste trop naturel et la nature n'est pas parfois bien faite.

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par PRomu@ld
    Ca n'est pas portable non plus ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%6d %5d\n", T[i], T[i]*T[i]);
    Pourquoi affecter 6 pour le nombre et 5 pour son carré ? Le contraire aurait été plus judicieux, on a en effet :
    Arf, rien à voir ! Question de présentation. Pour être aligné avec "Nombre" et "Carre"...

    Sinon, oui, on peut définir des largeurs de colonnes d'une façon moins ... empirique !
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Luther13
    la Pauvre ! Mais je trouve pas ça si horrible que ça.
    Juste trop naturel et la nature n'est pas parfois bien faite.
    Arf ! Horreur et incompréhension !

    Je ne parlais pas de cette présentation là, sur laquelle je n'ai pas d'avis particulier, mais de la présentation du code (et de l'application, par ailleurs), évidemment (c'est quand même un des sujets du forum !)
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    merci a vous tous. j'ai bien notée tout ça.

  16. #16
    Membre du Club Avatar de Raiden
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 65
    Points
    65
    Par défaut
    N'oublie pas un petit si ton probleme est résolu
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

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

Discussions similaires

  1. probleme de segmentation erreur?
    Par Jeane dans le forum C++
    Réponses: 22
    Dernier message: 06/07/2007, 20h01
  2. [Socket] Probleme de segment TCP
    Par zwoke dans le forum C#
    Réponses: 2
    Dernier message: 05/04/2007, 10h09
  3. probleme de segment de memoire partagé
    Par charisma dans le forum C
    Réponses: 1
    Dernier message: 09/01/2007, 10h08
  4. Probleme de segmentation fault avec sprintf
    Par MathG dans le forum C++
    Réponses: 5
    Dernier message: 14/12/2006, 01h12
  5. Gros probleme de segmentation
    Par Treuze dans le forum C++
    Réponses: 10
    Dernier message: 10/04/2006, 11h10

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