je me répond à moi même pour m'excuser ! je suis nouveau et j'ai du faire une bourde !! la réponse n'est pas sur le bon sujet... !
Version imprimable
je me répond à moi même pour m'excuser ! je suis nouveau et j'ai du faire une bourde !! la réponse n'est pas sur le bon sujet... !
Non.Citation:
Envoyé par benhoeil
Si tu ne sais pas, ne dit rien ou vérifie...Citation:
Je ne sais plus exactement,
Tu dis de grosses bétises...Citation:
mais il y a d'abord un linefeed, puis un cariage return. quand tu tape entrée sous UNIX, tu rajoute donc 2 caractères !! fait bien attention de lire les deux !
Si tu utilises les fonctions standards et les flux en mode texte, la fin de ligne est '\n' (c'est portable).
Ce qu'il y a réellement dans les fichiers dépend du système.
http://emmanuel-delahaye.developpez....s.htm#fichiers
:oops:
oui je viens de vérifier, tu as raison, et au temps pour moi !!!
par contre, j'ai souvenir d'un problème de ce genre.
si j'utilise getc sur stdin (qui est donc une fonction standard) et que je tape "enter" sous dos/win, qu'arrive-t-il ? getc va-t-il me retourner 13 puis 10 ? il me semble que oui. c'est pour ça que j'ai fait la remarque.
Non. Il va retourner '\n' quelque soit le système. C'est garanti par la définition du langage. Des millions de lignes de code comptent là-dessus.Citation:
Envoyé par benhoeil
Tu confonds avec la façon dont sont marquées les fins de ligne dans les fichiers texte MS-DOS. Mais ça, je l'ai déjà expliqué dans le lien que je t'ai passé.
Oui, je viens de vérifier. je suis assez étonné, le bout de code suivant :
m'affiche sur un fichier édité sous Windows pour chaque "retour à la ligne" :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <stdio.h> int main(int argc, char **argv) { FILE *fp; int c; fp = fopen(argv[1], "r"); while(!feof(fp)) { c=getc(fp); printf("VALEUR %i %c\n", c, c); } }
-10 sous Win/DOS (alors qu'en fait, c'est bien 10,13)
-10 et 13 sous UNIX
donc, si je comprends, bien que les lignes se termine en 10 puis 13, les functions transforment discrètement en 10. C'est un peu le bordel, mais je suppose que ça assure une portabilité aux codes.
je viens de faire un autre test avant de poster et si j'ouvre le fichier en mode binaire, j'ai bien 10 et 13 à chaque retour à la ligne.
en tout cas merci pour ces précisions.
Euh... normalement, un fichier sous DOS a des fins de lignes en 13 puis 10 (CR-LF), et non en 10 puis 13...
les fonctions de stdio.h ouvrent par défaut en mode texte (les fonctions sans "f" aussi, d'ailleurs), aussi appelé mode transposé: c'est ce mode qui convertit les trois combinaisons possibles (CR (13) pour mac, CR-LF (13-10) pour DOS, 10 (LF ou "NewLine") pour unix) en un même caractère quel que soit la plate-forme.
Par contre, les fonctions de conio.h renvoient le code ASCII correspondant à la touche, et la touche RETURN (entrée) renvoit le code ASCII de CR (13). (en tout cas, c'est ce qui se passe sous DOS)
en fait la fonction gets() ne suffit pas pour la saisie de chaîne de caractère?
NON.
gets est une fonction qui n'aurait jamais du exister, car elle est la porte ouverte à tous les dépassements de buffer (elle ne permet de spécifier aucune limite)
Il faut TOUJOURS utiliser fgets à la place.
et fgets s'utilise de la même façon?
Qu'en pense ton livre de C?Citation:
Envoyé par Spike Spiegel
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers
Là est le problème: je n'en ai pas encore. Alors, j'essaye de suivre le prof pendant le cours et sachant qu'il va réellement vite, je me retrouve chez moi à essayer de trouver des cours sur le Net. Et biensûr à poser des questions sur ce forum.Citation:
Envoyé par Emmanuel Delahaye
je compte d'ailleurs m'acheter le livre "référence" enfin il paraît, écrit par Brian W. Kernighan et Dennis M. Ritchie.
En tout cas, le site vers lequel tu me redirige à chaque fois est très bien ! :wink: