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 :

Saisie et réaffichage de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Saisie et réaffichage de caractères
    Bonjour

    Je m'entraîne avec les fonctions et ce que je veux faire, c'est écrire une fonction qui permet d'entrer 5 caractères au clavier et ensuite les afficher.

    J'ai écrit ce code mais j'ai des erreurs :

    C:\Backup\CCours\test2\main.c|9|warning: return type defaults to 'int'|
    C:\Backup\CCours\test2\main.c||In function 'lecture':|
    C:\Backup\CCours\test2\main.c|10|error: 'mots' redeclared as different kind of symbol|
    C:\Backup\CCours\test2\main.c|8|note: previous definition of 'mots' was here|
    C:\Backup\CCours\test2\main.c||In function 'main':|
    C:\Backup\CCours\test2\main.c|22|error: 'mots' undeclared (first use in this function)|
    C:\Backup\CCours\test2\main.c|22|error: (Each undeclared identifier is reported only once|
    C:\Backup\CCours\test2\main.c|22|error: for each function it appears in.)|
    C:\Backup\CCours\test2\main.c|24|error: 'i' undeclared (first use in this function)|
    ||=== Build finished: 5 errors, 1 warnings ===|
    qui peux m'aider svp merci







    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //------------------------
    #define nbMots 5
    #define lgMots 5
     
    lecture(mots)
    {
        char mots[nbMots] [lgMots];
        int i;
        printf("Donnez %d mots\n",nbMots);
        for (i=0; i <nbMots; i++)
            scanf("%s",&mots[i] [0]);
     
    }
     
     
    int main()
    {
     
        lecture(mots);
        printf("---------\n");
        for (i=0; i<nbMots; i++)
            puts(&mots[i] [0]);
        return 0;
    }

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,

    allons-y dans l'ordre:
    main.c@9 warning: return type defaults to 'int'
    visiblement, une fonction n'a pas de type de valeur de retour, il suffit de le mentionner. Pour ne rien retourner, il faut préciser void
    main.c@10 In function 'lecture': error: 'mots' redeclared as different kind of symbol (main.c@8 note: previous definition of 'mots' was here)
    "mots" est un symbole déclaré par un argument dans le type de la fonction, (d'ailleurs, c'est un symbole de type…)
    Il ne peut pas être redéclaré comme un symbole de variable dans le code la fonction.

    main.c@22 In function 'main': error: 'mots' undeclared (first use in this function)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    main.c@24 In function 'main': error: 'i' undeclared (first use in this function)
    mots et i n'ont pas été déclaré, il faut donc résoudre ce problème.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci
    peux tu me corriger le code svp?

    merci encore

  4. #4
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Euh.... bah... euh...
    Comment le dire ?....

    Non ?


    Mais je vais te redonner des pistes plus détaillées :

    1) Typage des fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_de_retour MaFonction(type_argument NomArgument)
    2) Déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_variable MaVariable;
    Fais déjà ça, recompile.... réfléchis, et reviens poster si tu n'y arrives toujours pas !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    [mode=obséquieux]Conformément à notre réglement, il nous est interdit de faire les exercices, mais nous pouvons, et devrions, aider le questionneur à comprendre son problème.[/mode]

    Donc, non, pas de code.
    Reviens avec des questions précises, tu auras des réponses avec plaisir

  6. #6
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Ah oui et l'utilisation de scanf() est toujours bien pour débuter mais pose souvent des soucis a moins d’être très rigoureux!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%s",&mots[i] [0]);
    Dans le cas ou tu ne veux récupérer qu'un seul et unique caractère d'après ce que j'ai compris: utilise plutôt l'option %1s dans ton scanf pour forcer a 1 caractère la saisie.
    Et a quoi correspond le [0] ici? Tu utilises un tableau à 2 dimensions pour récupérer 5 caractères? Tu le gardes dans tout ton programme sans jamais le changer. Il y a plus optimisé

    Bonne chance

  7. #7
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Oulalalala...
    De quel langage de programmation viens-tu ? Du PHP à tout hasard ?


    Le plus sautant aux yeux : tu n'as pas typé ta fonction "lecture" ni son argument !

    "lecture" a l'air de ne rien renvoyer, tu peux donc la déclarer en "void".

    Ensuite :
    "mots" est utilisé par le main, mais est modifié dans "lecture".
    Donc tu dois le déclarer dans le "main", le passer en paramètre (donc déclarer à la fonction lecture que "mots" est de type char**... et corriger le scanf en conséquences)... et le retirer de la déclaration de lecture !

    i est déclaré dans "lecture", mais dans "main" il y en a aussi un !
    Mais ça n'est pas le même...
    Donc tu dois le déclarer aussi dans le main !

    Enfin : si ton programme ne prends pas de paramètre (ce qui est le cas), tu devrais l'exprimer en corrigeant le main :
    EDIT : miiiiiiiiiiiiiince.... leternel est plus rapide
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/12/2010, 16h54
  2. Boucle de saisie de chaines de caractères
    Par mailbox dans le forum Débuter
    Réponses: 8
    Dernier message: 13/11/2010, 12h52
  3. Limiter la saisie à un nombre de caractère
    Par 0nn2belle dans le forum C
    Réponses: 8
    Dernier message: 04/12/2008, 17h09
  4. Réponses: 16
    Dernier message: 24/10/2006, 21h37

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