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 :

Scanf jusqu'à EOF


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Par défaut Scanf jusqu'à EOF
    Bonjours à tous,

    J'essai d'écrire une fonction qui va lire une entrée au clavier jusqu'à ce que l'utilisateur tappe ctrl-d ou ctrl-z.

    Je désire placer chacun des mots de la phrase entrée dans un tableau de chaines de caracteres.

    Voici je que j'ai écrit, mais ça ne fonctionne pas. J'ai essayé autant comme autant et je ne trouve pas la solution.

    Si l'un d'entre vous pouvais m'apportez son aide, ce serai grandement apprécié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        char *phrase[1000];
        printf("Entrez une phrase: ");
        int i = 0;
     
     
        do{
            scanf("%s", &phrase[i]);
            ++i;
        } while (phrase[i-1] != EOF);
    Merci infiniment

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    EOF n'est pas un caractère, c'est un code retourné par les fonctions de type getc pour indiquer que la fin du fichier a été atteinte. Tu trouveras d'amples explications dans ce tutoriel.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Une erreur :
    réserve 1000 pointeurs mais pas de place pour ranger les chaines lues

    - Tester le retour du scanf() pour sortir de la boucle.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        char phrase[1000][100];
        printf("Entrez une phrase: ");
        int i = 0;
        int stat;
        do{
            stat = scanf("%s", phrase[i]);
            ++i;
        } while(stat == 1);

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Bonjour,

    Ta condition de boucle serait correcte si tu utilisais fgetc(), car cette fonction renvoie le caractère lu ou le marqueur EOF par le même biais, mais scanf("%s") dépose le mot lu à l'adresse indiquée et renvoie le nombre d'éléments traités, ou EOF en cas d'erreur ou de fin de fichier atteinte. Il faut donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int i;
     
    i = scanf ("%s",emplacement);
    … et traiter i dans ta boucle.

    Par ailleurs, la définition de ton tableau de mots n'est pas correcte. Tu as défini un tableau de 1000 pointeurs, mais scanf() n'alloue pas la mémoire elle-même. Elle attend en argument un pointeur vers de la place réservée. Tel que tu as écrit ton programme, chaque mot va écraser le précédent avec une granularité de quatre ou huit caractères.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Par défaut
    Merci mille fois à ceux qui on répondu.

    Votre aide m'a été très utile, et je ne pouvait demander mieux.

    Merci, résolu!

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

Discussions similaires

  1. [OLE Excel] Aller jusqu'à la dernière cellule rempli
    Par JBrek dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 07/08/2009, 19h21
  2. Comment lire jusqu'au caractère CTRL-D EOF ?
    Par AsmCode dans le forum C
    Réponses: 9
    Dernier message: 08/02/2007, 21h27
  3. PB avec scanf
    Par ché dans le forum C
    Réponses: 6
    Dernier message: 13/08/2003, 07h25
  4. [debutant]la fonction scanf
    Par kalaka dans le forum C
    Réponses: 7
    Dernier message: 01/07/2003, 15h15
  5. Réponses: 6
    Dernier message: 10/09/2002, 03h35

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