Antoine Leca a écrit :Reste le cas de EOF : il faut bien comprendre que si tu utilises
c = getc(FLUX);
if ( fin(FLUX) ) break;
/* ... */
en C, l'opération fin(FLUX) s'écrira
c == EOF
On peut aussi utiliser feof(FLUX) dans le cas présent, non?
Antoine Leca a écrit :
Reste le cas de EOF : il faut bien comprendre que si tu utilises
c = getc(FLUX);
if ( fin(FLUX) ) break;
/* ... */
en C, l'opération fin(FLUX) s'écrira
c == EOF
On peut aussi utiliser feof(FLUX) dans le cas présent, non?
Antoine Leca a écrit :Reste le cas de EOF : il faut bien comprendre que si tu utilises
c = getc(FLUX);
if ( fin(FLUX) ) break;
/* ... */
en C, l'opération fin(FLUX) s'écrira
c == EOF
On peut aussi utiliser feof(FLUX) dans le cas présent, non?
en C, l'opération fin(FLUX) s'écrira
c == EOF
On peut aussi utiliser feof(FLUX) dans le cas présent, non?
Bof.
feof() ne renvoie vrai qu'une fois que tu as *atteint* la fin du fichier,
donc typiquement, uniquement quand tu as essaye de lire, et que ton getchar
t'a renvoye un EOF.
-> tu sais deja que tu es a la fin du flux.
-> feof() ne sert qu'a discerner feof() de ferror().
en C, l'opération fin(FLUX) s'écrira
c == EOF
On peut aussi utiliser feof(FLUX) dans le cas présent, non?
Bof.
feof() ne renvoie vrai qu'une fois que tu as *atteint* la fin du fichier,
donc typiquement, uniquement quand tu as essaye de lire, et que ton getchar
t'a renvoye un EOF.
-> tu sais deja que tu es a la fin du flux.
-> feof() ne sert qu'a discerner feof() de ferror().
en C, l'opération fin(FLUX) s'écrira
c == EOF
On peut aussi utiliser feof(FLUX) dans le cas présent, non?
Bof.
feof() ne renvoie vrai qu'une fois que tu as *atteint* la fin du fichier,
donc typiquement, uniquement quand tu as essaye de lire, et que ton getchar
t'a renvoye un EOF.
-> tu sais deja que tu es a la fin du flux.
-> feof() ne sert qu'a discerner feof() de ferror().
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont une
fonctionnalité type feof.
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont une
fonctionnalité type feof.
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont une
fonctionnalité type feof.
Samuel DEVULDER writes:Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont une
fonctionnalité type feof.
Quelques problèmes:
- c'est quand même différent des langages qui ont un feof prédictif qui ont
besoin de quelque chose du genre:
if FEOF(fl) then break;
c := FGETC(flux);
- ne permet pas de détecter une erreur de lecture (fgetc retourne EOF mais
feof est faux et ferror est vrai)
- si j'ai bonne mémoire, feof peut être vrai sans que le résultat de
fgetc() soit EOF (simplement l'entrée suivant échouera pour cause de fin
de fichier)
- cette forme ne s'etends pas aux autres fonctions d'I/O (pour lesquelles
je suis sûr du point précédent)
- ce n'est pas idiomatique et il faut donc réfléchir plus
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> writes:
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont une
fonctionnalité type feof.
Quelques problèmes:
- c'est quand même différent des langages qui ont un feof prédictif qui ont
besoin de quelque chose du genre:
if FEOF(fl) then break;
c := FGETC(flux);
- ne permet pas de détecter une erreur de lecture (fgetc retourne EOF mais
feof est faux et ferror est vrai)
- si j'ai bonne mémoire, feof peut être vrai sans que le résultat de
fgetc() soit EOF (simplement l'entrée suivant échouera pour cause de fin
de fichier)
- cette forme ne s'etends pas aux autres fonctions d'I/O (pour lesquelles
je suis sûr du point précédent)
- ce n'est pas idiomatique et il faut donc réfléchir plus
Samuel DEVULDER writes:Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont une
fonctionnalité type feof.
Quelques problèmes:
- c'est quand même différent des langages qui ont un feof prédictif qui ont
besoin de quelque chose du genre:
if FEOF(fl) then break;
c := FGETC(flux);
- ne permet pas de détecter une erreur de lecture (fgetc retourne EOF mais
feof est faux et ferror est vrai)
- si j'ai bonne mémoire, feof peut être vrai sans que le résultat de
fgetc() soit EOF (simplement l'entrée suivant échouera pour cause de fin
de fichier)
- cette forme ne s'etends pas aux autres fonctions d'I/O (pour lesquelles
je suis sûr du point précédent)
- ce n'est pas idiomatique et il faut donc réfléchir plus
A vrai dire, je prends le temps d'apprendre avec un tuto en ligne qui
contient des exercices de difficultés croissantes et qui suivent un
programme. Les exercices sont très accessibles car pour mon niveau,
j'estime le K&R au-delà de mes facultés même avec de l'entraînement.
Je trouve que le K&R demande un certain niveau d'abstraction (j'ai
passé un peu de temps à comprendre les exercices de push et pop du
stack) mais en surface seulement, je ne suis pas sûre de comprendre
quelque chose d'aussi abstrait que certaines des fonctions qu'ils
écrivent, j'ai déjà beaucoup de mal avec malloc et free...Si j'avais
eu à écrire le programme de conversion celsius-fahrenheit, j'aurais
fait quelque chose de plus long.
Seulement, j'essaie d'aller au-delà des exercices du tuto avec lequel
j'apprends [...]
A vrai dire, je prends le temps d'apprendre avec un tuto en ligne qui
contient des exercices de difficultés croissantes et qui suivent un
programme. Les exercices sont très accessibles car pour mon niveau,
j'estime le K&R au-delà de mes facultés même avec de l'entraînement.
Je trouve que le K&R demande un certain niveau d'abstraction (j'ai
passé un peu de temps à comprendre les exercices de push et pop du
stack) mais en surface seulement, je ne suis pas sûre de comprendre
quelque chose d'aussi abstrait que certaines des fonctions qu'ils
écrivent, j'ai déjà beaucoup de mal avec malloc et free...Si j'avais
eu à écrire le programme de conversion celsius-fahrenheit, j'aurais
fait quelque chose de plus long.
Seulement, j'essaie d'aller au-delà des exercices du tuto avec lequel
j'apprends [...]
A vrai dire, je prends le temps d'apprendre avec un tuto en ligne qui
contient des exercices de difficultés croissantes et qui suivent un
programme. Les exercices sont très accessibles car pour mon niveau,
j'estime le K&R au-delà de mes facultés même avec de l'entraînement.
Je trouve que le K&R demande un certain niveau d'abstraction (j'ai
passé un peu de temps à comprendre les exercices de push et pop du
stack) mais en surface seulement, je ne suis pas sûre de comprendre
quelque chose d'aussi abstrait que certaines des fonctions qu'ils
écrivent, j'ai déjà beaucoup de mal avec malloc et free...Si j'avais
eu à écrire le programme de conversion celsius-fahrenheit, j'aurais
fait quelque chose de plus long.
Seulement, j'essaie d'aller au-delà des exercices du tuto avec lequel
j'apprends [...]
Jean-Marc Bourguet a écrit :
> Samuel DEVULDER writes:
>
>> Par ailleurs l'écriture suivante:
>>
>> char c = (char)fgetc(FLUX);
>> if(feof(FLUX)) break;
>>
>> Me semble claire, et assez proche des API des autres langages qui ont une
>> fonctionnalité type feof.
> Quelques problèmes:
> - c'est quand même différent des langages qui ont un feof prédictif qui
> ont
> besoin de quelque chose du genre:
> if FEOF(fl) then break;
> c := FGETC(flux);
Un pseudo pascal?
Oui.. mais pas mal de langages ont un feof() issu de la sémantique du C qui
n'est pas prédictif. Le Pascal est connu pour avoir des pbs avec son EOF()
qui "lit un char en avant sans le manger".
> - ne permet pas de détecter une erreur de lecture (fgetc retourne EOF
> mais feof est faux et ferror est vrai)
Normal, ca ne testes que la fin de fichier. Une seule chose par fonction
me semble être un truc pas mal. Comme tu l'indiques, pour les erreurs il
y a ferror().
> - si j'ai bonne mémoire, feof peut être vrai sans que le résultat de
> fgetc() soit EOF (simplement l'entrée suivant échouera pour cause de fin
> de fichier)
C'est pas logique, tu décris un feof() prédictif.
> - cette forme ne s'etends pas aux autres fonctions d'I/O (pour lesquelles
> je suis sûr du point précédent)
Les io ailleurs que stdio? Parce que feof() doit marcher sur tout FILE*,
donc ca marche avec fread() aussi par ex.
> - ce n'est pas idiomatique et il faut donc réfléchir plus
A te lire, je me demande bien pourquoi ils ont crées feof() si il ne faut
pas trop l'utiliser. Bon c'est peut être une question de gout.
Jean-Marc Bourguet a écrit :
> Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> writes:
>
>> Par ailleurs l'écriture suivante:
>>
>> char c = (char)fgetc(FLUX);
>> if(feof(FLUX)) break;
>>
>> Me semble claire, et assez proche des API des autres langages qui ont une
>> fonctionnalité type feof.
> Quelques problèmes:
> - c'est quand même différent des langages qui ont un feof prédictif qui
> ont
> besoin de quelque chose du genre:
> if FEOF(fl) then break;
> c := FGETC(flux);
Un pseudo pascal?
Oui.. mais pas mal de langages ont un feof() issu de la sémantique du C qui
n'est pas prédictif. Le Pascal est connu pour avoir des pbs avec son EOF()
qui "lit un char en avant sans le manger".
> - ne permet pas de détecter une erreur de lecture (fgetc retourne EOF
> mais feof est faux et ferror est vrai)
Normal, ca ne testes que la fin de fichier. Une seule chose par fonction
me semble être un truc pas mal. Comme tu l'indiques, pour les erreurs il
y a ferror().
> - si j'ai bonne mémoire, feof peut être vrai sans que le résultat de
> fgetc() soit EOF (simplement l'entrée suivant échouera pour cause de fin
> de fichier)
C'est pas logique, tu décris un feof() prédictif.
> - cette forme ne s'etends pas aux autres fonctions d'I/O (pour lesquelles
> je suis sûr du point précédent)
Les io ailleurs que stdio? Parce que feof() doit marcher sur tout FILE*,
donc ca marche avec fread() aussi par ex.
> - ce n'est pas idiomatique et il faut donc réfléchir plus
A te lire, je me demande bien pourquoi ils ont crées feof() si il ne faut
pas trop l'utiliser. Bon c'est peut être une question de gout.
Jean-Marc Bourguet a écrit :
> Samuel DEVULDER writes:
>
>> Par ailleurs l'écriture suivante:
>>
>> char c = (char)fgetc(FLUX);
>> if(feof(FLUX)) break;
>>
>> Me semble claire, et assez proche des API des autres langages qui ont une
>> fonctionnalité type feof.
> Quelques problèmes:
> - c'est quand même différent des langages qui ont un feof prédictif qui
> ont
> besoin de quelque chose du genre:
> if FEOF(fl) then break;
> c := FGETC(flux);
Un pseudo pascal?
Oui.. mais pas mal de langages ont un feof() issu de la sémantique du C qui
n'est pas prédictif. Le Pascal est connu pour avoir des pbs avec son EOF()
qui "lit un char en avant sans le manger".
> - ne permet pas de détecter une erreur de lecture (fgetc retourne EOF
> mais feof est faux et ferror est vrai)
Normal, ca ne testes que la fin de fichier. Une seule chose par fonction
me semble être un truc pas mal. Comme tu l'indiques, pour les erreurs il
y a ferror().
> - si j'ai bonne mémoire, feof peut être vrai sans que le résultat de
> fgetc() soit EOF (simplement l'entrée suivant échouera pour cause de fin
> de fichier)
C'est pas logique, tu décris un feof() prédictif.
> - cette forme ne s'etends pas aux autres fonctions d'I/O (pour lesquelles
> je suis sûr du point précédent)
Les io ailleurs que stdio? Parce que feof() doit marcher sur tout FILE*,
donc ca marche avec fread() aussi par ex.
> - ce n'est pas idiomatique et il faut donc réfléchir plus
A te lire, je me demande bien pourquoi ils ont crées feof() si il ne faut
pas trop l'utiliser. Bon c'est peut être une question de gout.
C'est pas faux, mais quand on voit l'écriture "fonctionnelle" d'Antoine,
avec une fonction fin prenant le flux en argument (et pas le char/int),
moi ça me fait penser immédiatement à feof().
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont
une fonctionnalité type feof.
Il est ainsi plus simple de lire un code où la fin de fichier
se détecte via feof() plutot que de tantôt comparer le code de retour à
EOF, à 0, à -1 ou à NULL.
C'est pas faux, mais quand on voit l'écriture "fonctionnelle" d'Antoine,
avec une fonction fin prenant le flux en argument (et pas le char/int),
moi ça me fait penser immédiatement à feof().
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont
une fonctionnalité type feof.
Il est ainsi plus simple de lire un code où la fin de fichier
se détecte via feof() plutot que de tantôt comparer le code de retour à
EOF, à 0, à -1 ou à NULL.
C'est pas faux, mais quand on voit l'écriture "fonctionnelle" d'Antoine,
avec une fonction fin prenant le flux en argument (et pas le char/int),
moi ça me fait penser immédiatement à feof().
Par ailleurs l'écriture suivante:
char c = (char)fgetc(FLUX);
if(feof(FLUX)) break;
Me semble claire, et assez proche des API des autres langages qui ont
une fonctionnalité type feof.
Il est ainsi plus simple de lire un code où la fin de fichier
se détecte via feof() plutot que de tantôt comparer le code de retour à
EOF, à 0, à -1 ou à NULL.
Autrement je fais beaucoup de recherches et peut-être, je peux tomber
sur quelque chose qui n'est pas très à jour. Mais je serais curieux de
savoir pourquoi ça n'a existé que sur un système et pourquoi ça
n'existe plus mais après c'est vrai que je m'éloigne du sujet.
Autrement je fais beaucoup de recherches et peut-être, je peux tomber
sur quelque chose qui n'est pas très à jour. Mais je serais curieux de
savoir pourquoi ça n'a existé que sur un système et pourquoi ça
n'existe plus mais après c'est vrai que je m'éloigne du sujet.
Autrement je fais beaucoup de recherches et peut-être, je peux tomber
sur quelque chose qui n'est pas très à jour. Mais je serais curieux de
savoir pourquoi ça n'a existé que sur un système et pourquoi ça
n'existe plus mais après c'est vrai que je m'éloigne du sujet.
En plus, il semble que bpascal étudie sur une machine Linux en s'aidant
d'un livre écrit pour MSDOS. J'ai donc essayer d'attirer son attention
sur le fait qu'il doive faire l'effort de s'abstraire à ce niveau.
Et se concentrer sur les seules choses qui importent, sans chercher à
essayer d'utiliser l'assembleur ou les tampons ou je-ne-sais-quoi.
En plus, il semble que bpascal étudie sur une machine Linux en s'aidant
d'un livre écrit pour MSDOS. J'ai donc essayer d'attirer son attention
sur le fait qu'il doive faire l'effort de s'abstraire à ce niveau.
Et se concentrer sur les seules choses qui importent, sans chercher à
essayer d'utiliser l'assembleur ou les tampons ou je-ne-sais-quoi.
En plus, il semble que bpascal étudie sur une machine Linux en s'aidant
d'un livre écrit pour MSDOS. J'ai donc essayer d'attirer son attention
sur le fait qu'il doive faire l'effort de s'abstraire à ce niveau.
Et se concentrer sur les seules choses qui importent, sans chercher à
essayer d'utiliser l'assembleur ou les tampons ou je-ne-sais-quoi.