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 :

Entrée dans un programme (question de débutants)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Par défaut Entrée dans un programme (question de débutants)
    Bonjour à tous,

    j'aimerais vous enquiquiner juste une dernière fois (après je vous promets je fais un break sur les questions bêtes),
    y a-t-il un moyen simple (donc accessible à mon niveau) de définir une entrée autre que le clavier dans un programme du style "compter les lignes" ?

    Je suppose qu'on doit modifier la valeur de getchar mais je n'arrive pas à trouver ça dans mon bouquin à mon niveau (K&R) alors qu'ils proposent de tester le programme sur lui-même...ce qui suppose de régler le fichier source comme entrée dans le programme ?

    Merci par avance

    Michael

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Oui, au lieu de fgets(..,stdin) c'est fgets(..,fichier), ou bien fscanf au lieu de scanf.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Par défaut
    donc par exemple :
    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
     
    #include <stdio.h>
    #define DEDANS 1
    #define DEHORS 0
    /*compte les lignes, les mots et les caractères en entrée */
     
    main()
    {
          int c, nl, nm, nc, etat;
          nl = nm = nc = 0 ;
           while ((c=getchar())!=EOF)
           {
                ++nc;
                if (c == '\n');
                ++nl     ;
                if (c == ' ' || c == '\n' || c == '\t')
                     etat = DEHORS;
                else if (etat == DEHORS)
                {
                     etat = DEDANS ;
                     ++nm;
     
                }
     
          }
          printf("%d\t %d\t %d\n", nl, nm, nc) ;
     
     
    }
    je dois mettre fgets("adresse du fichier à ouvrir comme entrée") à la place de quoi ?
    je dois le mettre dans la parenthèse de getchar ? ou alors échanger getchar pour fgets?

    Merci d'expliciter, je suis vraiment au tout début de mon apprentissage.

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Non, l'équivalent de getchar c'est fgetc
    Mais pour le faire sur un fichier, il faut l'ouvrir d'abord...

    Bah ouvre ton bouquin de C au chapitre des fichiers...

  5. #5
    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
    Attention ton code est incorrect :

    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
    #include <stdio.h>
    #define DEDANS 1
    #define DEHORS 0
    /*compte les lignes, les mots et les caractères en entrée */
    // attention au prototype de main, 
    // ici tu n'as pas besoin des arguments de la ligne de commande
    int main(void)
    {
          int c, nl, nm, nc, etat;
          nl = nm = nc = 0 ;
           while ((c=getchar())!=EOF)
           {
                ++nc;
     
                // ceci aurait-du être signalé par le compilateur
                // règle correctement les options
                if (c == '\n'); <== attention le test ici ne sert à rien a cause du ;
                   ++nl     ;
     
     
                if (c == ' ' || c == '\n' || c == '\t')
                     etat = DEHORS;
                else if (etat == DEHORS)
                {
                     etat = DEDANS ;
                     ++nm;
     
                }
     
          }
          printf("%d\t %d\t %d\n", nl, nm, nc) ;
     
         // main étant une fonction, elle doit retourner une valeur 
          return 0;
    }
    Il faut étudier correctement les options du compilo, les warnings signalés à la compile sont d'une grande aide pour la rédaction du programme

    Un code légèrement plus rapide peut-être celui-ci
    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
    #include <stdio.h>
    #define DEDANS 1
    #define DEHORS 0
    /*compte les lignes, les mots et les caractères en entrée */
     
    int main(void)
    {
          int c, nl, nm, nc, etat;
          nl = nm = nc = 0 ;
           while ((c=getchar())!=EOF)
           {
                ++nc;
    /*
                if (c == '\n');
                ++nl     ;
    */
                if (c == ' ' || c == '\n' || c == '\t')
                {
                     etat = DEHORS;
                     if (c == '\n')
                        ++nl;
                }
                else if (etat == DEHORS)
                {
                     etat = DEDANS ;
                     ++nm;
     
                }
     
          }
          printf("%d\t %d\t %d\n", nl, nm, nc) ;
     
          return 0;
    }
    "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

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Par défaut
    Je vais étudier la question gruik, c'était pour faire l'exo, je me doute bien qu'en passant 20mn dans le bouquin pour trouver comment appliquer mon programme de 5 lignes à lui même je devrais y arriver, mais j'essaie de coller au bouquin (et donc à sa progression) parce que j'ai jamais programmé, et que si jem e perds dans le bouquin de K&R je vais y passer la nuit pour trouver ... ce qu'on pourrait m'expliquer en 5 mn
    Cela dit, le K&R est bien fait mais présume pas mal d'acquis, en particulier sur tous ce qui est fichier justement ... si ils te balancent à la 15ème page "appliquez votre programme à lui même" sans t'expliquer comment faire, t'es un peu perdu ...

    Merci pour la correction du code, il me faisait effectivement un warning mais je pigeais pas à quoi il faisait référence.
    C'était donc le ";" après la condition... ce qui rend tout ça plus clair dans ma tête.
    Cela dit, j'ai un warning "no newline at end of file" même avec ton code à la dernière ligne.... j'arrive pas à voir ce qui va pas...vous savez à quoi c'est dû ?

    Merci bien !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par michael-C
    y a-t-il un moyen simple (donc accessible à mon niveau) de définir une entrée autre que le clavier dans un programme du style "compter les lignes" ?
    Oui. Le livre de C de Kernighan & Ritchie n'est pas fait pour les débutants absolus en informatique.

    Il faut connaitre un peu son système et savoir faire une indirection entrante (ligne de commande) comme, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ monappli < monfichier
    K&R2 chapitre 7 (page 150)

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/09/2007, 09h35
  2. Réponses: 9
    Dernier message: 06/06/2007, 15h40
  3. Supprimer une entrée dans ajout suppression des programmes
    Par lavazavio dans le forum Windows XP
    Réponses: 5
    Dernier message: 01/05/2007, 18h30
  4. [Débutant] Pause dans un programme en mode console ?
    Par pugnator dans le forum Langage
    Réponses: 2
    Dernier message: 15/12/2006, 12h08
  5. [Débutant] Listener pour une entrée dans le presse papier.
    Par Silvio02 dans le forum Général Java
    Réponses: 6
    Dernier message: 08/01/2006, 22h44

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