Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1629 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c]Debutant sous xp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c]Debutant sous xp

n°918221
zaynyy
Posté le 08-12-2004 à 18:56:55  profilanswer
 

Bonjour,
je travaille a l'école sous linuxx avec les logiciels EMACS et la console.
 
J'ai un programme a faire mais il y a un probleme.
Je suis sur XP avec Dev c++.  
Le programme affiche en numerotant, les lignes lues sur le fichier d'entrée standard...
 
J'ai ecrit ce programme et il marche tres bien sous linuxx. Et ce, en ecrivant dans la console :
 
$./cat-num < nomdufichier
 
 
Ici, je donne directement le nom du fichier a examiner (fichier sur lequel on va compter les lignes etc...)
 
 
Mais, sous XP, comment faire cela? En effet, je n'ai pas de console, donc je ne sais pas où taper le nom du fichier de l'entrée standard...!
 
 
*Existe il une version identique a celle de linuxx sous XP?
*Peut on detourner ce probleme en rajoutant dans mon programme une ligne qui va saisir le nom du fichier a examiner?
            fscanf(stdin,"%s",chaine);
->cette ligne correspond t elle a ma solution? J'ai essayé mais je ne connais pas du tout son fonctionnement.  
 
Voila ce que m'affiche dev c++ :
 
12 e:\docume~1\admini~1\bureau\cours\c\test\jefais\td3exo1.c
 `chaine' undeclared (first use in this function)
 
 
12 e:\docume~1\admini~1\bureau\cours\c\test\jefais\td3exo1.c
 (Each undeclared identifier is reported only once
 
 
12 e:\docume~1\admini~1\bureau\cours\c\test\jefais\td3exo1.c
 for each function it appears in.)
 
 
12  
 
 
 
Voici mon programme :
 
 
 
/*Ce programme affiche en numérotant les lignes lues sur l'entrée  
standard.*/
 
#include <stdio.h>
int main(void)
{
  int ligne; /*Declaration des variables.*/
  char c;
  ligne=0;
 
  printf("tape le nom du fichier : " );
  fscanf(stdin,"%s",chaine);
  getch();

 
/*Condition 'si il n y a pas de lignes dans le fichier d'entrée'*/
 
  if (c<1)
    {
      printf("il n y a pas de lignes dans le fichier." );
    }
else
  {
  printf ("%d ",ligne);
   while ((c=getc(stdin))!=EOF)
    {
 
      /*On affiche le numero de la ligne au debut de chaque ligne*/
 
      putc (c,stdout);
      /*On affiche sur l'ecran, l'entrée*/
 
      if (c=='\n')
       {
        ligne++;
        printf ("%d ",ligne);
       }
    }
  }
 
  /*On lit sur l'entrée standard*/
 
  getch();
  return 0;
 
}
 
 
 
en gras, les lignes que j'ai rajouté pour essayer de saisir le nom du fichier SOUS XP
 
 
Qui peut m'aider svp?


Message édité par zaynyy le 08-12-2004 à 19:07:30
mood
Publicité
Posté le 08-12-2004 à 18:56:55  profilanswer
 

n°918229
Taz
bisounours-codeur
Posté le 08-12-2004 à 19:01:38  profilanswer
 

t'es pas une fille, tant pis
 
Nous fais pas croire que ton programme pas sous Linux, hein, tu auras les mêmes erreurs. Faudrait voir à apprendre l'anglais. Quelle partie tu as manquée dans "chaine' undeclared (first use in this function) "
 
 
fscanf(stdin,"%s",chaine);  
-> fgets(chaine, sizeof chaine, stdin);

n°918240
zaynyy
Posté le 08-12-2004 à 19:10:44  profilanswer
 

Taz a écrit :

t'es pas une fille, tant pis
 
Nous fais pas croire que ton programme pas sous Linux, hein, tu auras les mêmes erreurs. Faudrait voir à apprendre l'anglais. Quelle partie tu as manquée dans "chaine' undeclared (first use in this function) "
 
 
fscanf(stdin,"%s",chaine);  
-> fgets(chaine, sizeof chaine, stdin);


 
Je ne comprends pas.
Les lignes en GRAS que j'ai rajouté, sont celles rajoutées sous XP.
fgets(chaine, sizeof chaine, stdin);
->a quoi cela correspond t il stp?
merci

n°918243
Taz
bisounours-codeur
Posté le 08-12-2004 à 19:16:10  profilanswer
 

à rien. vire les

n°918292
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 20:39:50  profilanswer
 

zaynyy a écrit :

Bonjour,
je travaille a l'école sous linuxx avec les logiciels EMACS et la console.


Linux...

Citation :


J'ai un programme a faire mais il y a un probleme.
Je suis sur XP avec Dev c++.  


Aucun problème.

Citation :


Le programme affiche en numerotant, les lignes lues sur le fichier d'entrée standard...
 
J'ai ecrit ce programme et il marche tres bien sous Linux. Et ce, en ecrivant dans la console :
 
$./cat-num < nomdufichier
 
 
Ici, je donne directement le nom du fichier a examiner (fichier sur lequel on va compter les lignes etc...)
 
Mais, sous XP, comment faire cela? En effet, je n'ai pas de console, donc je ne sais pas où taper le nom du fichier de l'entrée standard...!


Aucun problème : demarrer / exécuter, puis tu lances cmd.exe. Le système ouvre une console ça se passe comme sous Linux. Rien à modifier. C'est le principe de la portabilité.
 
Attention quand même, les variables locales ('c', par exemple) nécessitent une initialisation explicite, sinon, la valeur est indeterminée.
 
Ceci fonctionne:
 

Code :
  1. /*Ce programme affiche en numérotant les lignes lues sur l'entrée   
  2.    standard. */
  3. #ifndef __linux__
  4. #include <stdlib.h>
  5. #else
  6. #endif
  7. #include <stdio.h>
  8. int main (void)
  9. {
  10.    int ligne;                   /*Declaration des variables. */
  11.    int c;
  12.    ligne = 0;
  13.    #define FMT "%3d"
  14.    printf (FMT ": ", ligne);
  15.    ligne++;
  16.  
  17.    while ((c = getc (stdin)) != EOF)
  18.    {
  19.       /*On affiche le numero de la ligne au debut de chaque ligne */
  20.       if (c == '\n')
  21.       {
  22.          printf ("\n" FMT ": ", ligne);
  23.          ligne++;
  24.       }
  25.       else
  26.       {
  27.          /*On affiche sur l'ecran, l'entrée */
  28.          putc (c, stdout);
  29.       }
  30.    }
  31.    printf ("\n" );
  32.  
  33. #ifndef __linux__
  34.    system ("pause" );
  35. #else
  36. #endif
  37.    return 0;
  38. }


Message édité par Emmanuel Delahaye le 08-12-2004 à 21:59:20

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°918331
zaynyy
Posté le 08-12-2004 à 21:28:16  profilanswer
 

Emmanuel Delahaye a écrit :

Linux...

Citation :


J'ai un programme a faire mais il y a un probleme.
Je suis sur XP avec Dev c++.  


Aucun problème.

Citation :


Le programme affiche en numerotant, les lignes lues sur le fichier d'entrée standard...
 
J'ai ecrit ce programme et il marche tres bien sous Linux. Et ce, en ecrivant dans la console :
 
$./cat-num < nomdufichier
 
 
Ici, je donne directement le nom du fichier a examiner (fichier sur lequel on va compter les lignes etc...)
 
Mais, sous XP, comment faire cela? En effet, je n'ai pas de console, donc je ne sais pas où taper le nom du fichier de l'entrée standard...!


Aucun problème quand tu lances ton programme (demarrer / exécuter), le système ouvre une console ça se passe comme sous Linux. Rien à modifier. C'est le principe de la portabilité.
 
Attention quand même, les variables locales ('c', par exemple) nécessitent une initialisation explicite, sinon, la valeur est indeterminée.
 
Ceci fonctionne:
 

Code :
  1. /*Ce programme affiche en numérotant les lignes lues sur l'entrée   
  2.    standard. */
  3. #ifndef __linux__
  4. #include <stdlib.h>
  5. #else
  6. #endif
  7. #include <stdio.h>
  8. int main (void)
  9. {
  10.    int ligne;                   /*Declaration des variables. */
  11.    char c;
  12.    ligne = 0;
  13.    #define FMT "%3d"
  14.    printf (FMT ": ", ligne);
  15.    ligne++;
  16.  
  17.    while ((c = getc (stdin)) != EOF)
  18.    {
  19.       /*On affiche le numero de la ligne au debut de chaque ligne */
  20.       if (c == '\n')
  21.       {
  22.          printf ("\n" FMT ": ", ligne);
  23.          ligne++;
  24.       }
  25.       else
  26.       {
  27.          /*On affiche sur l'ecran, l'entrée */
  28.          putc (c, stdout);
  29.       }
  30.    }
  31.    printf ("\n" );
  32.  
  33. #ifndef __linux__
  34.    system ("pause" );
  35. #else
  36. #endif
  37.    return 0;
  38. }




 
J'essaie en fait un prog pour qu'il compte les lignes d'un fichier donné.
Mais cela ne marche pas avec ton programme. Je ne peux pas donner le nom du fichier a examiner.

n°918334
Taz
bisounours-codeur
Posté le 08-12-2004 à 21:39:46  profilanswer
 

c'est très gentil, mais la charte de ce forum dit que la résolution d'exercices n'est pas autorisée. Sinon, c'est l'avalanche, on récupère même souvent toute la classe, chacun y allant avec son sujet, certains recopient même leur énoncé.

n°918339
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 21:43:41  profilanswer
 

zaynyy a écrit :

J'essaie en fait un prog pour qu'il compte les lignes d'un fichier donné.
Mais cela ne marche pas avec ton programme. Je ne peux pas donner le nom du fichier a examiner.


Effectivement, ça ne marche pas dans Demarrer / Exécuter. Je corrige mes posts.
 
Par contre, ça fonctionne dans une console. Il suffit de lancer 'command' sous Win9x ou 'cmd.exe' sout NT/XP.
 
Ensuite, tu tapes la commande comme sous linux, sauf que le séparateur de chemin (si besoin est) est '\' au lieu de '/'
 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°918341
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 21:44:44  profilanswer
 

Taz a écrit :

c'est très gentil, mais la charte de ce forum dit que la résolution d'exercices n'est pas autorisée. Sinon, c'est l'avalanche, on récupère même souvent toute la classe, chacun y allant avec son sujet, certains recopient même leur énoncé.


Oui, désolé, je me suis laissé emporté par mon enthousiasme...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°918346
Taz
bisounours-codeur
Posté le 08-12-2004 à 21:51:27  profilanswer
 

avec une petite faute sur le getchar [:kadreg]
http://www.eskimo.com/~scs/C-faq/q12.1.html

mood
Publicité
Posté le 08-12-2004 à 21:51:27  profilanswer
 

n°918355
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 21:58:52  profilanswer
 

Taz a écrit :

avec une petite faute sur le getchar [:kadreg]
http://www.eskimo.com/~scs/C-faq/q12.1.html


Voui! Je corrige.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°918362
push
/dev/random
Posté le 08-12-2004 à 22:09:14  profilanswer
 

et vous proposez quoi comme alternative ?

n°918365
Taz
bisounours-codeur
Posté le 08-12-2004 à 22:11:22  profilanswer
 

push a écrit :

et vous proposez quoi comme alternative ?

à quoi?


Message édité par Taz le 08-12-2004 à 22:11:31
n°918366
push
/dev/random
Posté le 08-12-2004 à 22:11:56  profilanswer
 

Code :
  1. while((c = getchar()) != EOF)

n°918369
Slay
Posté le 08-12-2004 à 22:13:25  profilanswer
 

push a écrit :

et vous proposez quoi comme alternative ?


un if ?
 
 
ok je sors  :hello:

n°918370
Taz
bisounours-codeur
Posté le 08-12-2004 à 22:14:00  profilanswer
 

ben j'ai donné un lien d'explication. Et si tu lis les 36 sujets de mosieur, j'y relève la même faute.

n°918373
Taz
bisounours-codeur
Posté le 08-12-2004 à 22:15:09  profilanswer
 

Slay a écrit :

un if ?
 
 
ok je sors  :hello:

commande plutôt des lunettes et un cours d'anglais pour nowel :24:

n°918375
push
/dev/random
Posté le 08-12-2004 à 22:16:28  profilanswer
 

Taz a écrit :

ben j'ai donné un lien d'explication. Et si tu lis les 36 sujets de mosieur, j'y relève la même faute.

j'ai lu, j'ai vu ou était le problème mais à moin que je sois aveugle j'ai pas vu d'alternative  :??:

n°918377
Taz
bisounours-codeur
Posté le 08-12-2004 à 22:17:25  profilanswer
 

ben ta variable doit être de type 'int'

n°918385
push
/dev/random
Posté le 08-12-2004 à 22:22:42  profilanswer
 

a ouais .. je savais pas que EOF en Dec faisait -1  :sweat:


Message édité par push le 08-12-2004 à 22:24:45
n°918394
Taz
bisounours-codeur
Posté le 08-12-2004 à 22:34:34  profilanswer
 

push a écrit :

a ouais .. je savais pas que EOF en Dec faisait -1  :sweat:

le problème c'est pas que ça fasse -1 ou autre chose, le problème, c'est que faut que ça soit quelque chose qui soit pas un char pour pouvoir le détecter


Message édité par Taz le 08-12-2004 à 22:42:50
n°918408
Emmanuel D​elahaye
C is a sharp tool
Posté le 08-12-2004 à 22:42:00  profilanswer
 

Taz a écrit :

le problème c'est pas que ça fasse -1 ou autre chose, le problème, c'est que faux que ça soit quelque chose qui soit pas un char pour pouvoir le détecter


La norme dit 'un int négatif'. -1 est certes un valeur courante, mais il faut utiliser l'abstraction EOF pour être portable. La définition est faite par le compilateur et ses includes...


Message édité par Emmanuel Delahaye le 09-12-2004 à 08:12:34

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°918423
push
/dev/random
Posté le 08-12-2004 à 22:50:44  profilanswer
 

ok ok j'avais saisi mais j'ai vu au passage se que valait EOF.

n°918486
push
/dev/random
Posté le 08-12-2004 à 23:46:21  profilanswer
 

je me suis un peu amusé... arrêtez moi si je dis une connerie,
 
dans le cas ou EOF représente -1, le fait de le manipuler comme un char fait qu'on se retrouve à manipuler le caratère correspondant en binaire au complément à 2 de -1 à savoir 255 pour un octet. Donc ça aurait posé problème si on avait eut le caractère ÿ dans le flux.
 

Code :
  1. #include <stdio.h>
  2.                                                                                
  3. int main(void)
  4. {
  5. char c = 'ÿ';
  6.                                                                                
  7. if(c == EOF) {
  8. printf("push\n" );
  9. }
  10.                                                                                
  11. return 0;
  12. }


 
plop@Antec plop $ ./a.out
push


Message édité par push le 09-12-2004 à 00:06:17
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c]Debutant sous xp

 

Sujets relatifs
[PROB] PHP debutant - Retour a la ligneprob de variable (debutant)
débutant en VBA (petit probléme)Intégration de pages PHP sur un site - débutant
Debutant :Token et Vectordébutant c++ gtk cherche aide pour petit programme
débutant recherche aide pour gtk et c++[Débutant] Optimisation d'un menu
[openGL/debutant] Eclairage infini.question de débutant à propos des array
Plus de sujets relatifs à : [c]Debutant sous xp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR