|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Laura Étudiant Inscription : décembre 2012 Messages : 5 ![]() |
Bonjour!
Dans le but de tester des fonctions de traitements du signal, je voulais générer un fichier de donnée, l'enregistrer, puis le réouvrir et tester mes fonctions dessus. Mais je ne parviens pas à faire cela correctement, je crois que j'ai vraiment besoin de lumière sur ce qui est écrit et ce qui est lu, car le C est assez nouveau pour moi et j'ai encore du mal à savoir ce que je manipule. Après avoir épluchés plusieurs discussions, il m'a semblé qu'il était plus facile d'écrire en binaire, mais je suis ouverte à d'autre suggestion Mon code pour générer mon fichier de données est le suivant: Code :
Ensuite j'essaye d'ouvrir ce fichier et de le lire, pour cela mon code est: Code :
Pouvez vous m'aider à diagnostiquer d'où vient le problème? Merci à tous et bonnes fêtes |
||||
|
|
20
|
|
|
#2 | |
![]() ![]() ![]() |
Bonjour,
D'après le man l'option "b" de fopen est désormais ignoré. Citation:
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
00
|
|
|
#3 |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 489 ![]() |
fscanf() est utilisé pour lire des données formatées (donc si les doubles étaient écrits en texte dans le fichier) , pas des données binaires. Se tourner vers fread().
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
20
|
|
|
#4 | ||
|
Membre éclairé
![]() Développeur informatique Inscription : mai 2011 Messages : 206 ![]() |
Et attention, le fichier est ouvert deux fois:
Code :
|
||
|
|
30
|
|
|
#5 | |||
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 534 ![]() |
Salut
Citation:
Uniquement sur des systèmes types posix...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
00
|
|
|
#6 | ||||
|
Invité régulier
![]() Laura Étudiant Inscription : décembre 2012 Messages : 5 ![]() |
Bonjour,
Merci pour vos réponses ! j'ai donc utilisé fread, par contre je n'arrive pas à passer à l'interieur d'une fonction? Quand j'execute: Code :
cela fonctionne, mais en revanche : Code :
Lorsque le printf est exécuté dans la fonction, une erreur indique "Exception non gérée à 0x0041174e dans ced.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000." comme si a un endroit j'avais confondu adresse et valeur? Pouvez vous m'expliquer ce que j'ai fait d'incorrect? Merci pour votre aide! |
||||
|
|
00
|
|
|
#7 |
![]() ![]() ![]() |
Bonjour,
Tout d'abord fread retourne quelque chose, il serait bien de vérifier sa valeur de retour. Ensuite, ton tableau est in1 et non in. Sinon essaye de faire attention à l'indentation pour garder un code lisible.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Laura Étudiant Inscription : décembre 2012 Messages : 5 ![]() |
le in1 était une erreur de ma part en copiant le code ici, j'avais remplacé les in1 par des in pour rendre le code un peu plus lisible; dans mon programme les déclarations sont cohérentes;
J'ai regardé la valeur sortie par fread, elle est égale au nombre de lignes de mon fichier (dans les deux cas, dans le main comme dans la fonction) donc n'indique pas d'erreur. Bon j'ai essayé en entrant directement in et non &in dans la fonction et ça fonctionne a présent, mais du coup la question que je me pose est maintenant "pourquoi est ce que avec &in cela fonctionnait?" |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Développeur C Inscription : août 2004 Messages : 2 095 ![]() |
in et &in sont des adresses, donc ça ne gêne pas fread dans sont exécution. Par contre, fread a stocké le résultat à l'adresse de in au lieu de le stocker dans in. Donc, les données n'ont pas été stockée là où tu le voulais.
|
|
|
00
|
|
|
#10 | |
|
Invité régulier
![]() Laura Étudiant Inscription : décembre 2012 Messages : 5 ![]() |
Citation:
Merci! Bonne année à tous Laura |
|
|
|
00
|
|
|
#11 | |||
|
Expert Confirmé Sénior
![]() ![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 534 ![]() |
Citation:
fread a besoin de recevoir l'adresse de la variable où il devra stocker ses valeurs. Or in est déjà une adresse donc c'est fread(in, ..., ..., ...) et non fread(&in, ..., ..., ...) !!!
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
|||
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() Laura Étudiant Inscription : décembre 2012 Messages : 5 ![]() |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com