echo echo Bonjour echo Bonjour, bla bla bla , au revoir echo Bonjour au revoirElle imprime la liste de ses arguments séparer par des blancs.
Lorsque unix appelle une commade, il lui passe en fait deux arguments "argc" et "argv" qui sont le nombre d'arguments sur la ligne de commande, et un vecteurs de chaînes de caractères qui contient les arguments. Attention!
Le nombre d'argument est toujours au moins un, le premier étant le nom de la commande. On peut le vérifier en imprimant le nombre d'argument. Le programme suivant (incomplet) imprime le nombre d'argument qui lui est passé à chaque appel.
#include <On remarquera la façon de prendre en compte les arguments dans main. En C les expressions de types sonmt préfixées. Ainsi, "int argc" signifie une variable "argc" de type "int". Prenez pour l'instant l'expresssion "char* argv[]" telle quelle. Elle signifie une variable "argv" qui est de vecteur de chaîne de caractères. En C "char*" est le type des chaînes de caractères. Nous y reviendrons plus tard.stdlib.h> #include <stdio.h> int main (int argc, char *argv[]) { printf ("il y avait %d arguments à l'appel\n", argc); return 0; }
La commande "printf" maintenant utilisé avec deux arguments.
printf ("il y avait %d arguments à l'appel\n", argc);signifie imprimer la chaîne
printf ("il %c avait %d %sl'appel\n", 'y' argc, "arguments à ");Ici %c, %d, et %s sont remplacé par les arguments supplémentaires pris dans le même ordre. Attention! Il doit y avoir autant d'arguments supplémentaires à "printf" que de % dans le premier arguemnt. Les arguments doivent avoir un type compatible avec la lettre qui suit le %.
if (argc > 1) printf ("%s", argv[1]); printf ("\n"); return 0;le programme est correct pour 0 ou un argument. argc > 1 est une expression alors que printf ("%s", argv[n]); est une instruction. Attention! les vecteurs commencent toujours à l'index 0. "v[0]" est le premier argument, "v[1]" le second, etc. L'instruction
Ci-dessus on a utilisé l'instruction
Au lieu de
if (argc > 1) printf ("%s", argv[1]);On aurait pu aussi écrire
if (argc > 1) { printf ("%s", argv[1]); }Attention! Le point-virgule fait parti des instructions élémentaire, mais il n'y a pas de point-virgule après un bloc. Bien regarder ou sont les point-virgules dans les exemples.
printf ("%s", argv[1]);seule dans son bloque par la suite d'instruction
int n; printf ("%s", argv[1]); n = 2; while (n < argc) { printf ("%s", argv[n]); n = n +1; }L'instruction int n; déclare une variables n de type int. Elle doit toujours être en début de bloc, et sa portée est le bloc dans lequel elle est définie.
true false true && bonjour false && bonjour false || bonjour false || bonjour true && echo True! || echo False! false && echo True! || echo False!Le commande composée c1 && c2 en unix exécute la commande c1 puis c2 seulement si la première réussit. Le commande composée c1 && c2 en unix exécute la commande c1 puis c2 seulement si la première échoue.
int getchar ();lit un caractère au clavier et retourne l'entier correspondant à son code ascii, ou la constante prédéfinie EOF si la fin de fichier est rencontrée. Attention! pour pouvoir tester sur la valeur EOF, il est important de ne pas coercer l'entier dans un caractère. La fonction
int putchar (int c);écrit le caractère dont le code ascii est l'entier c.
bonjour | copy copy < copy.cLa première ligne exécute la commande bonjour et envoie le résultat à la commande copy. La seconde ligne exécute la commande copy en lisant le fichier copy.c au lieu de lire au clavier.
Par exemple, on peut réécire le programme copy en utilisant scanf au lieu de getchar. En voici le corps:
char c; while (scanf ("%c", &c) > 0) { printf ("%c", c); }Notez les nombreuses différences!
Exercice
Écrire un programme square qui lit une suite de nombres en entrée, et
qui retourne leur carré.
On pourra tester en rentrant les nombres au clavier interactivement, ou dans
un fichier, ou encore
echo 1 2 3 | squareComment obtenir les puissances 4 d'une liste de nombres ?