wesh scanf !
This commit is contained in:
		
							parent
							
								
									326926aa16
								
							
						
					
					
						commit
						f7b5af5a9b
					
				
							
								
								
									
										81
									
								
								chap/C.tex
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								chap/C.tex
									
									
									
									
									
								
							| @ -103,7 +103,7 @@ Il est temps de préciser les détails. | |||||||
| Une fonction a un unique point d'entrée\footnote{Qui a déja joué | Une fonction a un unique point d'entrée\footnote{Qui a déja joué | ||||||
| avec le ENTRY du Fortran ?}, avec une éventuelle liste | avec le ENTRY du Fortran ?}, avec une éventuelle liste | ||||||
| de paramètres, | de paramètres, | ||||||
| et une tout aussi éventuelel unique valeur de retour. | et une tout aussi éventuelle unique valeur de retour. | ||||||
| 
 | 
 | ||||||
| XXX\index{XXX} | XXX\index{XXX} | ||||||
| 
 | 
 | ||||||
| @ -114,8 +114,11 @@ XXX\index{XXX} | |||||||
| 
 | 
 | ||||||
| Il est évident qu'un logiciel qui n'a aucun moyen de communiquer | Il est évident qu'un logiciel qui n'a aucun moyen de communiquer | ||||||
| avec le monde extérieur a bien moins d'utilité qu'un bon ed. | avec le monde extérieur a bien moins d'utilité qu'un bon ed. | ||||||
| Dans le schéma «~classique~», ces échanges ont lieu par | Dans le schéma «~classique~» d'une utilisation interactive, | ||||||
| le truchement d'un terminal. | ces échanges ont lieu par | ||||||
|  | le truchement d'un terminal, qui peut tout aussi bien | ||||||
|  | être une \textsl{real glasstty} ou une fenêtre d'un émulateur | ||||||
|  | graphique de terminal, comme \texttt{xterm}. | ||||||
| 
 | 
 | ||||||
| \subsection{Les trois flux canoniques} | \subsection{Les trois flux canoniques} | ||||||
| 
 | 
 | ||||||
| @ -268,6 +271,55 @@ Avez-vous bien révisé la section qui cause des pointeurs ? | |||||||
| À ne plus savoir où peut être la tête de lecture ? | À ne plus savoir où peut être la tête de lecture ? | ||||||
| Alors les subtilités de \texttt{scanf} vont vous plaire. | Alors les subtilités de \texttt{scanf} vont vous plaire. | ||||||
| 
 | 
 | ||||||
|  | Nous allons commencer par un exemple simple~: la lecture | ||||||
|  | de deux nombres entiers depuis l'entrée standard. | ||||||
|  | Les valeurs lues seront stockée dans deux variables | ||||||
|  | de type \texttt{int}. | ||||||
|  | 
 | ||||||
|  | \begin{verbatim} | ||||||
|  | #include  <stdio.h> | ||||||
|  | ... | ||||||
|  | int       foo, bar, nbread; | ||||||
|  | nbread = scanf("%d %d", &foo, &bar); | ||||||
|  | \end{verbatim} | ||||||
|  | 
 | ||||||
|  | Le premier argument est une chaine de caractères contenant | ||||||
|  | des directives de conversion, semblables à celles | ||||||
|  | du printf. | ||||||
|  | Dans cette exemple, nous avons deux fois \texttt{"\%d"} | ||||||
|  | séparées par une espace. Cette directive veut dire | ||||||
|  | « lire les chiffres qui arrivent et les convertir | ||||||
|  | en nombre entier quand il n'y en a plus », une | ||||||
|  | simple règle de conversion. | ||||||
|  | 
 | ||||||
|  | Les deux arguments suivants sont les adresses des deux variables | ||||||
|  | destinées à recevoir les valeurs lues, | ||||||
|  | ou, en langage commun « faut mettre ÇA LÀ ».  | ||||||
|  | Ce sont donc des pointeurs, on les reconnait au  | ||||||
|  | caractère \& qui précède leur nom. | ||||||
|  | 
 | ||||||
|  | Quand à la valeur retournée par la fonction scanf, elle | ||||||
|  | présente un grand intérêt car elle contient le nombre | ||||||
|  | de lectures élémentaires qui se sont bien passées. | ||||||
|  | Tous les cas d'erreur ne sont pas couvert, mais c'est  | ||||||
|  | suffisant pour traiter les cas simples de la discipline. | ||||||
|  | 
 | ||||||
|  | Donc, en toute rigueur, le code que nous venons de voir | ||||||
|  | devrait s'écrire, en utilisant comme il se doit | ||||||
|  | le \textsl{yoda coding} pour le test de cette valeur | ||||||
|  | de retour~: | ||||||
|  | 
 | ||||||
|  | \begin{verbatim} | ||||||
|  | ... | ||||||
|  | int       foo, bard; | ||||||
|  | if (2 != scanf("%d %d", &foo, &bar)) { | ||||||
|  |       fputs("FAIL\n", stderr) | ||||||
|  |       abort(); | ||||||
|  |       } | ||||||
|  | ... | ||||||
|  | \end{verbatim} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| \textit{To be continued...} | \textit{To be continued...} | ||||||
| 
 | 
 | ||||||
| % --------------------------------------------------------- | % --------------------------------------------------------- | ||||||
| @ -362,12 +414,14 @@ page \pageref{pipeline}. | |||||||
| 
 | 
 | ||||||
| \textbf{Ah, enfin, on a failli attendre !} | \textbf{Ah, enfin, on a failli attendre !} | ||||||
| 
 | 
 | ||||||
| Qu'est-ce qu'un pointeur ? La réponse est multiple, et c'est | Qu'est-ce qu'un pointeur ? | ||||||
|  | La réponse est multiple et parfois obscure, et c'est | ||||||
| le pointeur qui fait à la fois la force et la faiblesse du C. | le pointeur qui fait à la fois la force et la faiblesse du C. | ||||||
| Pour faire simple, un pointeur est une variable qui contient | Pour faire simple, un pointeur est une variable qui contient | ||||||
| l'adresse dans la mémoire d'une autre variable. | l'adresse dans la mémoire d'une autre variable. | ||||||
| 
 | 
 | ||||||
| Mais en fait c'est un peu plus subtil : un pointeur « connait » la taille | Mais en fait c'est un peu plus subtil : | ||||||
|  | un pointeur « connait » le type (donc la taille) | ||||||
| de l'objet pointé, et peut donc « parcourir » un tableau de ces objets. | de l'objet pointé, et peut donc « parcourir » un tableau de ces objets. | ||||||
| 
 | 
 | ||||||
| \begin{verbatim} | \begin{verbatim} | ||||||
| @ -377,14 +431,24 @@ ptr = tableau;             //   *ptr désigne tableau[0]; | |||||||
| ptr++;                     //   *ptr désigne tableau[1]; | ptr++;                     //   *ptr désigne tableau[1]; | ||||||
| \end{verbatim} | \end{verbatim} | ||||||
| 
 | 
 | ||||||
| XXX il y a beaucoup à dire, et de quoi bien rire \textsl{:)} | \index{XXX} | ||||||
|  | XXX il y a encore beaucoup à dire, et de quoi bien rire \textsl{:)} | ||||||
| 
 | 
 | ||||||
| % https://hackthedeveloper.com/function-pointer-in-c/ | % https://hackthedeveloper.com/function-pointer-in-c/ | ||||||
| 
 | 
 | ||||||
|  | \subsection{Pointeurs et chaines} | ||||||
|  | 
 | ||||||
|  | \subsection{Pointeurs et fonctions} | ||||||
|  | 
 | ||||||
|  | Exemple classique : qsort. | ||||||
|  | 
 | ||||||
| % ========================================================= | % ========================================================= | ||||||
| 
 | 
 | ||||||
| \section{Le préprocesseur}\index{cpp} | \section{Le préprocesseur}\index{cpp} | ||||||
| 
 | 
 | ||||||
|  | \textbf{Attention !} L'utilisation abusive du préprocesseur | ||||||
|  | peut générer des trolls de plusieurs centaines de posts. | ||||||
|  | 
 | ||||||
| Nous avons déja abordé de loin la directive \texttt{\#include}, | Nous avons déja abordé de loin la directive \texttt{\#include}, | ||||||
| qui fait partie du préprocesseur, comme toutes les lignes | qui fait partie du préprocesseur, comme toutes les lignes | ||||||
| de code commençant par le caractère \textbf{\#}. | de code commençant par le caractère \textbf{\#}. | ||||||
| @ -411,7 +475,10 @@ pour être traduite en codes opératoires, dont l'exécution | |||||||
| affichera une maxime dont la véracité demande à être vérifiée | affichera une maxime dont la véracité demande à être vérifiée | ||||||
| par l'expérimentation. Mais ça n'est pas fini. | par l'expérimentation. Mais ça n'est pas fini. | ||||||
| 
 | 
 | ||||||
| Ce sympathique \textsf{préproc'} nous permet aussi de faire | Ce sympathique \textsf{préproc'}% | ||||||
|  | \footnote{Certains l'appellent même tendrement « mon cépépé » | ||||||
|  | avec un regard de guimauve mal grillée.} | ||||||
|  | nous permet aussi de faire | ||||||
| de la compilation conditinnelle, et ça, c'est cool parce que | de la compilation conditinnelle, et ça, c'est cool parce que | ||||||
| ça ouvre la porte à plein de choses. | ça ouvre la porte à plein de choses. | ||||||
| Par exemple, l'instrumentation du code afin de faciliter | Par exemple, l'instrumentation du code afin de faciliter | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 tTh
						tTh