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

  FORUM HardWare.fr
  Programmation
  C

  Débuter en C

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Précédente
Auteur Sujet :

Débuter en C

n°1420983
stephaninh​o
Posté le 06-08-2006 à 20:04:33  profilanswer
 

Salut à tous ! j'avais, il y a quelques mois réalisé un topic similaire à celui-ci mais visiblement il à du être effacé :(.
 
Enfin me voila de nouveau.  
 
Je déja quelques petites questions : J'ai ici un bouquin très intéressant du fait de son aspect pédagogique très pointu. Je m'y retrouve bien et même si c'est long et ben ça vient. Il me donne un programme qui permet d'imprimer des listings seulement pour le coups c'est un peu vague, j'aimerais en savoir un peu plus. L'idée, je pense, est de faire travailler le maniement et la mise en page de l'ensemble, de prendre l'habitude à se tourner l'esprit et ainsi chercher à quoi servirait le programme.
 
le voici :  
 
/* PRINT_IT.C--Ce ^programme imprime les listings avec les numéros de lignes*/
#include <stdlib.h>
#include <stdio.h>
 
void do_heading(char *filename);
 
int line, page;
 
main( int argv, char *argc[] )
{
      char buffer[256];
      FILE *fp;
       
      if( argv < 2 )
      {
          fprintf(stderr, "\nLa syntaxe correcte est : " );
          fprintf(stderr, "\n\nPRINT_IT nomfichier.est\n" );
          exit(1);
          }
       
      if (( fp = fopen( argc[1], "r" )) == NULL )
      {
            fprintf( stderr, "Erreur d'ouverture du fichier, %s!", argc[1]);
            exit(1);
            }
       
      page = 0;
      line = 1;
      do_heading( argc[1] );
      while( fgets(buffer, 256, fp ) != NULL )
      {
             if( line % 55 == 0 )
             do_heading( argc[1] );
       
             fprintf( stdprn, "%4d:\t%s", line++, buffer );
             }
       
      fprintf( stdprn, "\f" );
      fclose(fp);
      return 0;
}
 
void do_heading( char *filename )
{
     page++;
     
     if (page > 1)
     fprintf( stdprn, "\f" );
     
     fprintf( stdprn, "page: %d, %s\n\n", page, filename );
}
 
 
Alors, il ne reconnait pas "stdprn" ainsi que "do_heading"  Pourrais-je avoir un coup de main ? A quoi servent ces deux fonctions ?  
J'utilise Dev C++ qui semble assez simple d'après ce qu'on m'avait déja dit sur ce forum et j'admet qu'une fois les premier bidouillages fait, on s'y adapte assez vite.  
 
Merci d'avance
 
Stéphaninho

Message cité 1 fois
Message édité par stephaninho le 06-08-2006 à 20:07:11
mood
Publicité
Posté le 06-08-2006 à 20:04:33  profilanswer
 

n°1421000
Elmoricq
Modérateur
Posté le 06-08-2006 à 20:20:03  profilanswer
 

Si ce programme provient de ton livre, alors jette ton livre. :sweat:
Des variables globales, des flux non standards, inversion des conventions argv/argc (bon ce n'est qu'une convention, mais quand même)... c'est pas génial. :/
 
Pour répondre à tes questions néanmoins : do_heading() devrait être correctement reconnu par le compilateur, je ne vois pas de problème.
Par contre pour stdprn c'est normal, c'est visiblement le nom d'un flux, mais je ne sais pas d'où ça sort. Et malgré le nom, ce n'est certainement pas standard.

n°1421082
pains-aux-​raisins
Fatal error
Posté le 06-08-2006 à 21:10:06  profilanswer
 

Elmoricq a écrit :

Si ce programme provient de ton livre, alors jette ton livre. :sweat:


stephaninho > Tu nous donne le titre du bouquin et le nom de l'auteur stp ?

n°1421108
stephaninh​o
Posté le 06-08-2006 à 21:27:36  profilanswer
 

Il est pourtant bien. le titre est "le language C" par peter aitken & bradley L. Jones
 
Effectivement, "stdprn" n'est pas reconnu par la norme ANSI. Cependant mon compilateur reconnait "stdout" je ne comprend pas pouquoi.. à quoi correspondent ces fonction ? ce sont bien des fonctions ?
 
il fait quoi exactement ?
 
merci d'avance !


Message édité par stephaninho le 06-08-2006 à 21:27:55
n°1421110
Elmoricq
Modérateur
Posté le 06-08-2006 à 21:30:21  profilanswer
 

stdout n'est pas une fonction, mais un flux. C'est en réalité une variable de type FILE*, définie par stdio.h
Le flux stdout est le flux de sortie standard. C'est là que s'écrivent les informations usuelles.
Sa contrepartie, stderr, est le flux d'erreur standard. C'est là que l'on écrit les erreurs.
Il en existe un troisième, toujours défini par la norme : stdin. C'est le flux d'entrée standard, habituellement le clavier, ou un fichier redirigé, etc.
 
Ces trois flux, stdin, stdout et stderr, sont définis par la norme.

n°1421161
stephaninh​o
Posté le 06-08-2006 à 22:32:07  profilanswer
 

je comprend mieux, cela dit je ne vois pas dans quel cas on utilise ces trois variable..  :??:

n°1421164
Elmoricq
Modérateur
Posté le 06-08-2006 à 22:37:40  profilanswer
 

Eh bien, par exemple, si tu souhaites afficher quelque chose, tu utilises tout naturellement :

printf("blahblah\n" );


 
La fonction printf() imprime en fait ce message sur stdout.
C'est équivalent à :

fprintf(stdout, "blahblah\n" );


 
Pareil pour stderr.
 
 
Quant à stdin, tu utilises une fonction de lecture, fgets() par exemple.

n°1421177
big_dadi_f​at
Posté le 06-08-2006 à 22:57:44  profilanswer
 

http://a526.g.akamai.net/7/526/14067/v1/img.priceminister.com/photo/1196430_M.jpg
 
 

n°1421180
pains-aux-​raisins
Fatal error
Posté le 06-08-2006 à 23:01:56  profilanswer
 

C'est gentil dadifat, mais on peut gérer sans toi pour l'instant. Si ça se corse on te fera signe...

n°1421204
Sve@r
Posté le 06-08-2006 à 23:42:23  profilanswer
 

stephaninho a écrit :

main( int argv, char *argc[] )



J'ai cru un instant que stephaninho avait fait une erreur en recopiant le programme sur ce forum. Mais quand je vois la suite

stephaninho a écrit :

if (( fp = fopen( argc[1], "r" )) == NULL )



Là je prends peur car je vois que ce n'est pas une erreur. Comment un auteur (sérieux ?) d'un bouquin de C peut écrire des trucs pareils ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 06-08-2006 à 23:42:23  profilanswer
 

n°1421206
pains-aux-​raisins
Fatal error
Posté le 06-08-2006 à 23:50:42  profilanswer
 

Ben, en fait, il suffit de se renseigner sur l'auteur pour comprendre le niveau...
 
http://www.pgacon.com/default.htm
 
Il doit pas être trop mauvais, il touche à pas mal de langages : VB, Javascript et puis occasionnellement du C.
En tout cas, il n'a pas l'air d'avoir la même expertise qu'un Kernighan dans le langage C...
 
Bah, j'imagine qu'il doit avoir une famille à nourrir...  :whistle:


Message édité par pains-aux-raisins le 06-08-2006 à 23:53:46
n°1421264
Elmoricq
Modérateur
Posté le 07-08-2006 à 09:43:49  profilanswer
 

A propos de livres et d'auteurs, je trouve également douteux que ce livre porte le même titre que celui de Kernighan&Ritchie, qui lui est une référence.
 
D'ailleurs stephaninho, je te le conseille, c'est à la fois un livre pour apprendre, avec des exercices, et un dictionnaire à avoir sous le coude pour plus tard. J'ai de l'expérience en langage C, et je continue à l'utiliser. :)

n°1421296
_darkalt3_
Proctopathe
Posté le 07-08-2006 à 10:28:23  profilanswer
 

pluzun pour le k&r

n°1421299
Trap D
Posté le 07-08-2006 à 10:31:16  profilanswer
 

Si je me souviens stdprn était défini en Turbo C, dans les années 85/90....

n°1421539
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-08-2006 à 15:04:01  profilanswer
 

pains-aux-raisins a écrit :

C'est gentil dadifat, mais on peut gérer sans toi pour l'instant. Si ça se corse on te fera signe...


[:rofl]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1421545
big_dadi_f​at
Posté le 07-08-2006 à 15:06:31  profilanswer
 


 
 :whistle:  
 
 
 

n°1422153
stephaninh​o
Posté le 08-08-2006 à 11:40:22  profilanswer
 

Pourtant les explications sont claires :$ ils precisent bien que cette phase je n'ai pas a comprendre reellement chaque element du programme, juste que je dois le taper voir ce qu'il fait et le modifier pour voir les resulstats.
 
Je vais surement en acheter un autre à l'occasion.  
 
merci de tout vos conseils en tout cas ! :) je garde precieusement vos conseils !  
 
quelqu'un pourrait me dire a quoi sert ce prog ? j'arrive pas à le faire fonctionner :$ J'ai dev C++ et je les lance avec l'invite de commande MS-dos car sous dev c++ il ne reste pas affiché, le fenetre se ferme immédiatement après avoir executé le programme.
 
merci :)

n°1422157
Elmoricq
Modérateur
Posté le 08-08-2006 à 11:45:52  profilanswer
 

stephaninho a écrit :

quelqu'un pourrait me dire a quoi sert ce prog ? j'arrive pas à le faire fonctionner :$ J'ai dev C++ et je les lance avec l'invite de commande MS-dos car sous dev c++ il ne reste pas affiché, le fenetre se ferme immédiatement après avoir executé le programme.


 
 

/* PRINT_IT.C--Ce ^programme imprime les listings avec les numéros de lignes*/


;)
 
C'est censé sortir sur l'imprimante, mais stdprn n'est pas standard. D'après Trap D c'est un flux défini dans un vieux compilateur particulier (Borland Turbo C), c'est donc obsolète. :/


Message édité par Elmoricq le 08-08-2006 à 11:46:12
n°1422164
stephaninh​o
Posté le 08-08-2006 à 11:52:20  profilanswer
 

Je l'ai lu aussi lol mais j'aimerais avoir plus de details sur l'ensemble  :ange:
 
En fait, stnprn n'est, comme je l'ai dit pas reconnu par la norme ansi, et le bouquin conseille, le cas ou il y aurait des probleme de compilation, de changer par stnout.  

n°1422176
franceso
Posté le 08-08-2006 à 12:00:34  profilanswer
 

ton programme lit le fichier que tu lui donnes en argument et le réécrit en faisant précéder chaque ligne par son numéro. Toutes les 55 lignes, on change de page et on place au début de la nouvelle page un en-tête.
 
Pour comprendre en détails comment ça marche, réfère toi à ton bouquin (qui doit quand même je suppose expliquer un peu les exemples fournis). La fonction do_header ne sert qu'à afficher les en-têtes de pages. La lecture / réécriture du fichier se trouve dans la boucle while.
 
EDIT: comme tous les autres, je ne saurais trop de conseiller l'achat d'un meilleur bouquin de C ; le tien n'a vraiment pas l'air terrible...


Message édité par franceso le 08-08-2006 à 12:02:05

---------------
TriScale innov
n°1422260
stephaninh​o
Posté le 08-08-2006 à 13:56:42  profilanswer
 

merci bien, je vais regarder ça de plus près..  
 
je crois que je vais me resigner à en acheter un autre oui :(

n°1422446
stephaninh​o
Posté le 08-08-2006 à 19:03:44  profilanswer
 

J'ai réussi à copiler mon programme, surement une erreur de frappe de ma part. le principe est de lui donner n'importe quel fichier texte et il mettra le numero de ligne a coté avec une en tete ? Je le fais sous l'invite de commande, c'est possible ? Je demande ça parce que j'ai essaye et il me dit : "PRINT_IT n'est pas reconnu en tant que commande interne ou externe, un programme executable ou un fichier de commande" je comprend presque le sens, juste "commande internet ou externe" qui me pose problème.. comment palier à ce problème !

n°1422449
franceso
Posté le 08-08-2006 à 19:12:13  profilanswer
 

stephaninho a écrit :

J'ai réussi à copiler mon programme, surement une erreur de frappe de ma part. le principe est de lui donner n'importe quel fichier texte et il mettra le numero de ligne a coté avec une en tete ? Je le fais sous l'invite de commande, c'est possible ? Je demande ça parce que j'ai essaye et il me dit : "PRINT_IT n'est pas reconnu en tant que commande interne ou externe, un programme executable ou un fichier de commande" je comprend presque le sens, juste "commande internet ou externe" qui me pose problème.. comment palier à ce problème !


 
En gros, ça veut dire que tu lui as demandé d'exécuter une commande "PRINT_IT", et que ce n'est pas une commande interne (genre "dir" ) donc il cherche un exécutable ou un script de ce nom là et il en trouve pas => erreur.
 
PRINT_IT, c'est bien le nom que tu as donné à ton exécutable ?
juste pour confirmation, tu tournes bien sous windows ?
tu peux donner la ligne de commande que tu as tapée ?
 
c'est peut-être un problème de PATH, mais je ne connais pas assez la ligne de commande windows pour en dire plus.


---------------
TriScale innov
n°1422462
stephaninh​o
Posté le 08-08-2006 à 19:42:33  profilanswer
 

honte sur moi, l'executable ne s'appele pas print_it (je debute...)
 
apres modif, voici ce que ca me donne
 
http://img458.imageshack.us/img458/1621/listingqv8.jpg

n°1422513
Elmoricq
Modérateur
Posté le 08-08-2006 à 21:07:38  profilanswer
 

C'est normal, les fichiers .DOC sont dans un format propriétaire non-documenté, en gros il n'y a quasiment que les logiciels Microsoft Word qui peuvent les comprendre (et quelques autres, mais ce n'est pas le sujet.)
 
Essaie ton programme sur un fichier texte tout simple, voire un fichier .INI qui traine...

n°1422536
stephaninh​o
Posté le 08-08-2006 à 21:44:30  profilanswer
 

T'es un as ! merci ça marche...  
 
tout ça pr ça lol il est nul ce programme, non ? !!!

n°1422540
_darkalt3_
Proctopathe
Posté le 08-08-2006 à 21:48:00  profilanswer
 

il faut bien commencer par quelque chose [:spamafote]
 
De plus, de la lecture de fichier, quand tu développes, tu en bouffes pas mal :D

n°1422542
Elmoricq
Modérateur
Posté le 08-08-2006 à 21:50:50  profilanswer
 

stephaninho a écrit :

T'es un as ! merci ça marche...  
 
tout ça pr ça lol il est nul ce programme, non ? !!!


 
J'ai encore, dans de vieux cartons, mon tout premier programme, écrit en pascal.  
Un space invader. En un temps où pour moi les tableaux étaient une rumeur (j'ai donc développé un starfield à coup de 150 variables), les variables locales un concept abstrait, et le mot "algorithme" une grossierté.
 
De temps à autre je le zieute, histoire de me rappeler l'humilité. :D

n°1422544
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-08-2006 à 21:52:47  profilanswer
 

Elmoricq a écrit :

J'ai encore, dans de vieux cartons, mon tout premier programme, écrit en pascal.  
Un space invader. En un temps où pour moi les tableaux étaient une rumeur (j'ai donc développé un starfield à coup de 150 variables), les variables locales un concept abstrait, et le mot "algorithme" une grossierté.
 
De temps à autre je le zieute, histoire de me rappeler l'humilité. :D


le premier space invaders qui nécessite 512 Mo [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1422545
Elmoricq
Modérateur
Posté le 08-08-2006 à 21:54:40  profilanswer
 

edit : avec une procédure d'install sur 3 disquettes et un loader de bitmaps pompé j'sais-plus-où :D


Message édité par Elmoricq le 08-08-2006 à 21:55:35
n°1422557
stephaninh​o
Posté le 08-08-2006 à 22:07:17  profilanswer
 

Si j'arrivais à faire ça je serai content lol

n°1422994
stephaninh​o
Posté le 09-08-2006 à 16:21:45  profilanswer
 

Salut à tous !  
 
une petite question, quel est l'interet d'utiliser fprintf et stderr alors qu'en utilisant juste printf on fait la meme chose ?  
 
Aussi, pourquoi je lis \n\n alors que \n fait la meme chose ?  
 

n°1423000
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 16:26:06  profilanswer
 

stephaninho a écrit :

une petite question, quel est l'interet d'utiliser fprintf et stderr alors qu'en utilisant juste printf on fait la meme chose ?


Ah bon , printf permet aussi d'écrire dans un stream ?
 

stephaninho a écrit :

Aussi, pourquoi je lis \n\n alors que \n fait la meme chose ?


Pour passer deux lignes ?  [:moule_bite]  


---------------
Töp of the plöp
n°1423002
skelter
Posté le 09-08-2006 à 16:28:20  profilanswer
 

_darkalt3_ a écrit :

Ah bon , printf permet aussi d'écrire dans un stream ?


 
tu veux dire permet d'ecrire dans stderr ?

n°1423009
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 16:31:51  profilanswer
 

skelter a écrit :

tu veux dire permet d'ecrire dans stderr ?


 

Code :
  1. int fprintf( FILE *stream, const char *format [, argument ]...);


 
Donc oui, dans stderr aussi ...


---------------
Töp of the plöp
n°1423037
stephaninh​o
Posté le 09-08-2006 à 16:50:58  profilanswer
 

un stream c'est quoi ? pour finir la différence avec printf est ou ?
 
aussi, pourquoi il faut mettre main() sans rien dans les parentheses ?

Message cité 3 fois
Message édité par stephaninho le 09-08-2006 à 16:55:45
n°1423039
pains-aux-​raisins
Fatal error
Posté le 09-08-2006 à 16:52:13  profilanswer
 

stream : une structure de donnée de type FIFO
printf : pas de paramètre de type FILE* (stream)


Message édité par pains-aux-raisins le 09-08-2006 à 16:52:51
n°1423041
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 16:54:04  profilanswer
 

stephaninho a écrit :

un stream c'est quoi ? pour finir la différence avec printf est ou ?


 
Tu te documentes jamais sur ce que tu utilises ?

n°1423060
stephaninh​o
Posté le 09-08-2006 à 17:06:26  profilanswer
 

Remarque un peu hostile à mon goût et complètement inutile.  
 
Je ne viens pas sur un forum demander de l'aide pour qu'on me reponde comme ça, le titre est "débuter en C" pas "le plus doué en C"...  si je demande c'est par conséquent que je n'ai pas l'information. Il y surement des domaine ou tu es moins doué je suppose que tu n'aprécierai ce type de remarque, ça fait partie d'une certaine pédagogie.  

Message cité 2 fois
Message édité par stephaninho le 09-08-2006 à 17:09:13
n°1423067
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:10:17  profilanswer
 

stream == flux
 
Voici quelques liens honteusement repris du site d'un forumeur d'ici :
http://mapage.noos.fr/emdel/init_c.htm#flux
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Précédente

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

  Débuter en C

 

Sujets relatifs
Choisir un langage pour débuter et en faire son métier[J2EE] Débuter en J2EE avec ce que fournit Sun
Debuter en C++ - Un bon Tuto en ligne mais sans C ![debuter en JSP] Ok mais avec quoi ? j'm'y perd...
Livre pour débuter en Java ?Débuter en programmation
[PHP] Quel bouquin pour bien debuterdébuter en vbs
débuter installation eclipse pblprobleme pour débuter java
Plus de sujets relatifs à : Débuter en C


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