A quoi sert stdin en C ?

Fermé
dekl38 Messages postés 158 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 6 avril 2016 - 4 juin 2012 à 15:29
dekl38 Messages postés 158 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 6 avril 2016 - 7 juin 2012 à 10:58
Bonjour,

Il y a un programe que je ne comprends pas, à quoi sert stdin ?


#include <stdio.h>
int main (int argc, char *argv[]) {
	FILE *f;
	char c;
	if (argc < 2)
		f = stdin ;
	else
		f = fopen (argv[1], "r");  /* gérer le cas d'erreur... */
	fscanf (f, «%c», &c) ;
	while (!feof(f)) {
		nombre = nombre + 1 ;
		fscanf(f, «%c», &c);  }
	fprintf («Nombre de caractères : %d \n», nombre);
return 0 ;
}



merci d'avance

3 réponses

_Ritchi_ Messages postés 21210 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 20 avril 2024 6 058
4 juin 2012 à 15:39
Salut,

C'est l'entrée standard.
Si il n'y a pas deux paramètres à l'appel de la fonction, alors, on considère le clavier comme source des entrées.
Si il y a deux paramètres (ou plus), on considère que le second paramètre est un fichier que l'on ouvre en lecture.

Ritchi
4
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 juin 2012 à 23:43
Si il n'y a pas deux paramètres à l'appel de la fonction, alors, on considère le clavier comme source des entrées.
Je dirais plutôt : s'il n'y a pas de paramètre alors on considère...

Si il y a deux paramètres (ou plus), on considère que le second paramètre est un fichier que l'on ouvre en lecture.
Non, on prend le premier paramètre.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 juin 2012 à 15:51
stdin est le pointeur de type FILE* qui représente le flux d'entrée standard (c'est à dire le clavier en mode console simple ou un fichier en cas d'indirection).
2
dekl38 Messages postés 158 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 6 avril 2016 12
4 juin 2012 à 17:10
Bonjour, merci beaucoup.

Donc ce programe prens des arguments, si il y en a au moins deux alors il créer un fichier contenant le deuxième argument. sinon il attend et créer in fichier avec l'entrée au clavier.

puis vient le :
fscanf (f, «%c», &c) 


c est le premier caractère de f .
while (!feof(f)) {
		nombre = nombre + 1 ;
		fscanf(f, «%c», &c);  }


compte le nombre de char avant la fin de f.
mais comment ?
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 4/06/2012 à 23:52
Donc ce programe prens des arguments, si il y en a au moins deux alors il créer un fichier contenant le deuxième argument. sinon il attend et créer in fichier avec l'entrée au clavier.
Non. S'il y a un paramètre ou plus (argv[0]), le programme ouvrira le fichier dont le nom correspond au premier paramètre. Il n'est pas question de création de fichier.

fscanf (f, «%c», &c)
Attention aux guillements utilisés. Il s'agit de " ".

compte le nombre de char avant la fin de f.
mais comment ?

Pas sûr d'avoir compris ta question. Le programme va tester si le pointeur est en fin de fichier (fichier au sens large). Sil n'est pas en fin de fichier, il incrémentera nombre et lira le caractère suivant. Ainsi en fin de fichier, tu connaîtras le nombre de caractères.

Sinon, attention à la mauvaise utilisation de feof. Ce n'est pas suffisant comme condition d'arrêt...

Cdlt,
0
dekl38 Messages postés 158 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 6 avril 2016 12
7 juin 2012 à 10:58
pourquoi feof n'est pas suffisant comme condition d'arrêt ?
0