I.T.A.G (DTS1)

Ce forum incha allah aura pour but d aider les etudiant de la DTS1 a en plus savoir cotee cours et tt que sa soit reseau ou devlopment
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Fonctions d'entrées/sorties/langage C

Aller en bas 
AuteurMessage
ultrasur
moderateur
moderateur
avatar

Messages : 200
Date d'inscription : 11/02/2008
Age : 31

MessageSujet: Fonctions d'entrées/sorties/langage C   Sam 16 Fév - 19:02

Le langage C se veut totalement indépendant du matériel sur lequel il est implanté. Les entrées sorties, bien que nécessaires à tout programme (il faut lui donner les données de départ et connaître les résultats), ne font donc pas partie intégrante du langage. On a simplement prévu des bibliothèques de fonctions de base, qui sont néanmoins standardisées, c'est à dire que sur chaque compilateur on dispose de ces bibliothèques, contenant les même fonctions (du moins du même nom et faisant apparemment la même chose, mais programmées différemment en fonction du matériel). Ces bibliothèques ont été définies par la norme ANSI, on peut donc les utiliser tout en restant portable. Nous détaillerons la bibliothèque STDIO.H. Sous Turbo C on utilise en plus CONIO.H

Je détaille beaucoup ces fonctions, et si vous n'êtes qu'au début du cours vous ne pourrez pas tout comprendre (je vous autorise même à passer au chapitre suivant). Sachez simplement qu'au fur et à mesure de votre progression vous pourrez retourner ici pour trouver plus de détails. Dans un premier temps, seuls printf et scanf vous seront nécessaires. En fait, dès les premiers cours, les étudiants me demandent toujours "comment afficher ceci...", c'est pourquoi je mets ces détails ici. De toute façon je n'ai pas besoin de me justifier, bon sang qui c'est le chef ici ?

char putchar(char) : affiche sur l'écran (ou du moins stdout) le caractère fourni en argument (entre parenthèses). stdout est l'écran, ou un fichier si on a redirigé l'écran (en rajoutant ">nomfichier" derrière l'appel du programme, sous DOS ou UNIX). Si besoin est, cette fonction retourne le caractère affiché ou EOF en cas d'erreur.

char getchar(void) : attend le prochain appui sur le clavier, et rend le caractère qui a été saisi. Mais attention certains systèmes d'exploitation ne transmetent au programme les informations du clavier qu'après l'appui de la touche entrée (retour chariot). Le retour chariot est lui aussi transmis. De même, si l'on vient de saisir une valeur numérique, le prochain getchar prendra en compte le retour chariot ou espace qui terminait le nombre. Je conseille donc en général la boucle :

do reponse=getchar(); while (reponse<=32);
qui élimine le retour chariot (et les autres caractères spéciaux).
Sous Turbo C, char getch(void) : attend le prochain appui sur le clavier, et rend le caractère qui a été saisi. (sans attendre le retour chariot), getche(void) fait en plus un écho du caractère à l'écran.

Dans STDIO.H, on trouve des fonctions plus évoluées, pouvant traiter plusieurs caractères à la suite, et les transformer pour en faire une chaîne de caractères ou une valeur numérique, entière ou réelle par exemple. Les entrées sont dites "bufférisées", c'est à dire que le texte n'est pas transmis, et peut donc encore être modifié, avant le retour chariot.

puts(chaîne) affiche, sur stdout, la chaîne de caractères puis positionne le curseur en début de ligne suivante. puts retourne EOF en cas d'erreur.

gets(chaîne) lecture d'une chaîne sur stdin. Tous les caractères peuvent être entrés, y compris les blancs. La saisie est terminée par un retour chariot. Gets retourne un pointeur sur le premier caractère entré (donc égal à son paramètre d'entrée, ou le pointeur NULL en cas d'erreur. Attention, gets ne vérifie pas s'il y a eu débordement de buffer, contrairement à fgets (le débordement est une méthode utilisée pour pirater votre ordinateur). On écrira donc plutôt : fgets(chaine,sizeof(chaine),stdin);

printf(format,listevaleurs) affiche la liste de valeurs (variables ou expressions) dans le format choisi. Le format est une chaîne de caractères entre guillemets (double quote "), dans laquelle se trouve un texte qui sera écrit tel quel, des spécifications de format (débutant par %) qui seront remplacées par la valeur effective des variables, dans l'ordre donné dans listevaleurs, et de caractères spéciaux (\). Printf retourne le nombre de caractères écrits, ou EOF en cas de problème.

Une spécification de format est de la forme :


% [flag][largeur][.précision][modificateur]type (entre [] facultatifs)
Le flag peut valoir : - (cadrage à gauche, rajout de blancs si nécessaire à droite), + (impression du signe, même pour les positifs), blanc (impression d'un blanc devant un nombre positif, à la place du signe), 0 (la justification d'un nombre se ferra par rajout de 0 à gauche au lieu de blancs). D'autres Flags sont possibles mais moins utiles, pour plus de détails voir l'aide en ligne de Turbo C.

La largeur est le nombre minimal de caractères à écrire (des blancs sont rajoutés si nécessaire). Si le texte à écrire est plus long, il est néanmoins écrit en totalité. En donnant le signe * comme largeur, le prochain argument de la liste de valeurs donnera la largeur (ex printf("%*f",largeur,réel)).

La précision définit, pour les réels, le nombre de chiffres après la virgule (doit être inférieur à la largeur). Dans la cas d'entiers, indique le nombre minimal de chiffes désiré (ajout de 0 sinon), alors que pour une chaîne (%s), elle indique la longueur maximale imprimée (tronqué si trop long). La précision peut, comme la largeur, être variable en donnant .*

Le modificateur peut être : h (short, pour les entiers), l (long pour les entiers, double pour les réels), L (long double pour les réels).

Le type est : c (char), s (chaîne de caractères, jusqu'au \0), d (int), u (entier non signé), x ou X (entier affiché en hexadécimal), o (entier affiché en octal), f (réel en virgule fixe), e ou E (réel en notation exponentielle), g ou G (réel en f si possible, e sinon), p (pointeur), % (pour afficher le signe %).

Les caractères spéciaux utilisables dans le format sont \t (tabulation), \n (retour à la ligne), \\ (signe \), \nb tout code ASCII, en décimal, hexa ou octal (\32=\040=\0x20=' '). Essayez printf("\007");

scanf(format,listeadresse) lecture au clavier de valeurs, dans le format spécifié. Les arguments sont des pointeurs sur les variables résultats (dans le cas de variables scalaires, les précéder par l'opérateur &). Scanf retourne le nombre de valeurs effectivement lues et mémorisées (pas les %*).

Le format peut contenir (entre ") : du texte (il devra être tapé exactement ainsi par l'utilisateur, et ne sera pas stocké), des séparateurs blancs (l'utilisateur devra taper un ou plusieurs blancs, tabulations, retours à la ligne), et des spécifications de format, sous la forme %[*][largeur][modificateur] type.

* signifie que la valeur sera lue mais ne sera pas stockée (ex scanf("%d%*c%d",&i,&j) : lecture de deux entiers séparés par n'importe quel caractère)

la largeur est la largeur maximale lue, scanf s'arrête avant s'il trouve un séparateur (blanc, tab, CR).

les modificateurs et types sont les mêmes que pour printf (excepté d,o,x : pour entiers short, D,O,X pour long). Dans le cas des chaînes (%s), le blanc est également un séparateur. On ne pourra donc pas entrer une chaîne avec des blancs par scanf, il faut utiliser gets.

Scanf lit dans stdin en considérant les retours chariot (CR) comme des blancs. on peut donc séparer par des CR plusieurs valeurs demandées dans le même scanf. Mais de même, si scanf a pu lire tous ses arguments sans arriver à la fin de la ligne, la suite servira au prochain scanf. Utilisez "fflush(stdin)" ou même "gets(bidon)" avant (pour être sur de commencer sur une nouvelle ligne) ou après scanf (pour ignorer la fin de la ligne) si nécessaire.

On dispose aussi de sprintf(chaîne, format, listevaleurs) qui permet d'écrire dans une chaîne plutôt que sur l'écran, et donc faire des conversions numériques ->ASCII; et de sscanf(chaîne, format,l isteadresse) qui lit dans une chaîne plutôt qu'au clavier. On possède encore d'autres fonctions dans STDIO, en particulier pour gérer les fichiers. Sous Linux vous en trouverez la liste par "man 3 stdio".


Dernière édition par ultrasur le Jeu 21 Fév - 10:47, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.realmadridclub.net
Admin
Admin
Admin
avatar

Messages : 26
Date d'inscription : 10/02/2008
Age : 32

MessageSujet: ??????????   Mar 19 Fév - 2:05

précise sur quelle programme tu veux parler la ou sur quelle notion merci d'avance
Admin king
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dts1.keuf.net
 
Fonctions d'entrées/sorties/langage C
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Recherche de TD
» Projet de câblage automatisme
» Entrée a LLG
» Entrée en seconde, question
» Belle entrée, facile à préparer!

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
I.T.A.G (DTS1) :: Cours de Réseaux et Development :: Devlopment :: cours-
Sauter vers: