comment se positionner au début d'un fichier ? - C++ - Programmation
Marsh Posté le 02-01-2003 à 18:01:14
Taz@PPC a écrit : et en C++ |
je ne dirais pas ce que l'on trouve dans mon code c++
Marsh Posté le 02-01-2003 à 18:06:55
j'avoue
(bon, a moitié en fait, vu que j'ai une tite couche par dessus)
Marsh Posté le 02-01-2003 à 22:28:16
j'ai essayé fseek mais ça me met un message d'erreur !
voilà le code au cas où.
Code :
|
Marsh Posté le 02-01-2003 à 23:07:38
ça compile mais j'ai un "debug error" au moment où la fenetre doit s'afficher.
Marsh Posté le 02-01-2003 à 23:27:20
airseb a écrit : ça compile mais j'ai un "debug error" au moment où la fenetre doit s'afficher. |
euh tu me provoques la ou quoi ?
Marsh Posté le 02-01-2003 à 23:29:53
airseb a écrit : ça compile mais j'ai un "debug error" au moment où la fenetre doit s'afficher. |
bordel, c'est vraiment TROP te demander de POSTER ce ***** DE MESSAGE D'ERREUR ?
Marsh Posté le 02-01-2003 à 23:36:06
c un efenetre qui apparait avec marque dessus :
"debug error
chemin du fichier
runtime error"
avec les boutons abandonner, recommencer, ignorer.
c tout !
Marsh Posté le 02-01-2003 à 23:41:24
airseb a écrit : c un efenetre qui apparait avec marque dessus : |
mince alors
Marsh Posté le 03-01-2003 à 11:29:27
Un petit conseil
Je serai toi j'initialiserai tous mes tableau avec Memset dés le debut.
c preferable et ca evite des soucis parfois.
Marsh Posté le 03-01-2003 à 12:13:53
acidman a écrit : Un petit conseil |
toi tu sors
c'est vrai que tu ferais peut etre mieux d'utiliser des std::vector et des std::string et profiter de leur constructeur qui forunissent une initiliasitation par défaut
mais t'en va surtout pas faire du malloc/memset. si tu utilises malloc (c'est a dire que tu dissocies allocation et construction), jete un oeil à uninitialized_fill/copy, etc.
Marsh Posté le 03-01-2003 à 13:14:33
Taz@PPC a écrit : toi tu sors |
Faut pas s'enerver comme ca
c'est un conseil car il faut prendre l'habitude d'initialisez les tableau c tout
Maintenant explique moi en quoi le memset n'est pas bon a utilisé?
Marsh Posté le 03-01-2003 à 13:28:55
parce que c'est du C pardi
en C++ on initialise pas, on construit. les constructeurs par déaut des types de bases sont triviaux et on peut éventuellement obtenir le meme résultat avec qu'avec une construction/affectation.
les fonctions meme* sont certes tres utilses en C mais ne servent à rien en C++. Bref, utilisez les std::vector qui construit proprement chaque élément de la séquence.
le code de airseb est du pur C: c'est bien simple chez moi, ça compile en C (sauf le iostream.h qui est inutile dans tous les cas) mais pas en C++.
d'ailleurs pourquoi je parle de C++
vas pour le memset alors, mais seulement sur des tableaux d'entier (pas de char (0 par imprimble), pas de flottant (0 est une représentation invalide qui peut déclencher des SIGFPE)
donc moi je n'utilise memset que pour intialiser des entiers et nettoyer proprement des zones avant des les exploiter
Marsh Posté le 03-01-2003 à 14:59:03
j'ai fais un petit test :
quand j'enleve les commentaires devant le 1er cout, la partie avant le fseek s'execute,mais pas la seconde comme si le fseek n'avait aucun effet
Et quand je met en commentaire toute la première partie avant le fseek( du "do" jusqu'au "while(!feof)" la 2ème marche parfaitement.
ce qui veut dire que le probleme est au nivo du fseek qui semble ne pas faire son effet, pouvez vous me dire pourquoi ?
Marsh Posté le 03-01-2003 à 21:38:41
Citation : vas pour le memset alors, mais seulement sur des tableaux d'entier (pas de char (0 par imprimble), pas de flottant (0 est une représentation invalide qui peut déclencher des SIGFPE) |
l'equivalent en C++
c'est std::fill
Par contre il existe des methodes rapides de copies
de blocs ou de remplissages de blocs avec MMX
qui ne peuvent pas etre compatibles avec les specifications du C++.
Tout depend de tes priorites.
LeGreg
Marsh Posté le 04-01-2003 à 04:28:26
Il me semble que fseek ne remet pas à 0 les indicateur d'erreur et eof: echec pour toute lecture/feof ultérieurs.
Essaie:
Code :
|
acidman a écrit : c'est un conseil car il faut prendre l'habitude d'initialisez les tableau c tout |
Je suis contre.
J'initialise que si j'en ai explicitement besoin.
En effet, le compilateur considère comme normal l'accès à une valeur initialisée, donc on perd une alerte potentielle.
Pour les initialisations nécessaires j'utilises '={};' (pour les tableaux vrais), comme ça le compilateur comprends.
Pour les initialisations de déboguage (repérer à coup sûr des valeurs bidon 'non-initialisées', j'utilises des macros debug-only.
Marsh Posté le 04-01-2003 à 12:37:57
koi comme macros debug que tu utilise le plus svt
cite moi juste 2-3 pour que je m'y mette un peu qd meme
Marsh Posté le 05-01-2003 à 06:32:13
Dans ce genre:
Code :
|
Je ne suis pas satisfait des noms. J'en cherche qui soient courts, explictes et cohérents.
'do{...} while(0)' est une astuce pour:
1) Obliger à placer un ';' après, comme pour une instruction.
2) Garantir que ce ';' est mangé et ne vas pas briser un if/else.
En C++ c'est un peu différent.
Marsh Posté le 05-01-2003 à 10:35:44
je croyais que t'avais dit que t'arreter les macros pour 2003
Marsh Posté le 05-01-2003 à 16:09:19
bon, puisque finalement vous voulez faire du C, je vous donne la solution.
Lorsque EOF est détecté, le flag d'erreur du flux est mis a jour. toute opération sur le flux est donc rendu impossible. la solution? raz le flag
void clearerr(FILE * stream);
et apres
void rewind(FILE * stream);
(qui est equivalent à fseek(stream, OL, SEEK_SET))
tout ça bien évidemment dans <stdio.h>
Marsh Posté le 02-01-2003 à 17:36:22
une fois qu'on est arrivé a la fin d'un fichier comment on fait pour se positionner au début ?