gestion de variables - C - Programmation
Marsh Posté le 10-05-2011 à 02:17:18
Je pense que c'est impossible. C'est d'ailleurs pour cela que lorsque tu éteins ton pc, tout ce que tu as pu faire dessus disparaît, et tu es obligé de réinstaller l'OS, les logiciels, et de retaper les textes, refaire les photos numériques, etc.
Plus sérieusement, pour stocker et réutiliser des données, on a inventé un truc bien pratique qui s'appelle "les fichiers".
Marsh Posté le 10-05-2011 à 03:00:35
Citation : est ce que c'est possible que le programme se rappelle de cette valeur pour une autre exécution |
Pas en C (ni un autre langage compilé)
Pour qu'un programme se rappelle une valeur, faut qu'il l'écrive qque part quand il connait la valeur, et qu'il aille la relire a l'execution suivante.
Avec un langage interprété, ie un script, c'est faisable, si le programme écrit la valeur dans le script.
Exemple en perl:
Code : |
le script, si A n'a pas de valeur, en demande une et l'inscrit en lui même, et si A a une valeur, il l'affiche et l'efface du script.
Suivant le même principe, mais avec plus de code, on peut faire beaucoup plus propre, en allant dumper/loader des objets perl sous forme d'une chaîne (tout un tas de modules perls pour faire cela existent) écrite dans une zone située après la zone de code d'un script perl (délimitable par un __END__)
A+,
Marsh Posté le 10-05-2011 à 10:04:31
Bonjour,
Merci pour vos explications
j'aimerai discuter ceci :
+un programme qui lit des variables et qui génère en même temps un fichier avec la syntaxe du C
+le fichier généré aura les valeurs des variables
comme ça on sera obligé d'introduire les valeurs une seule fois...
Possible????
Merci
Marsh Posté le 10-05-2011 à 10:38:19
Citation : et qui génère en même temps un fichier avec la syntaxe du C |
C'est pas très clair la.
Vous voulez re-générer le programme source en C, avec la valeur des variables dedans? C'est faisable, mais pas particulièrement utile, puisqu'ensuite, il faudra bien recompiler ce programme source pour obtenir un exécutable (c'est justement cette phase de recompilation qu'on n'a pas avec un langage interprété).
Ou bien, vous voulez lire et écrire des valeurs de données dans un fichier (donc autre que le programme C)?
A+,
Marsh Posté le 10-05-2011 à 11:26:33
oui c'est le deuxième cas, c'est à dire générer un fichier qui va comporter le même programme de départ mais avec les valeurs qu'on vient de lire lors du premier programme.
donc on aura un fichier.c qui vas etre compiler et exécuter tout seul et on a introduit les valeurs qu'une seule fois (c'est ça l'objectif)
voici un essai pour généré un fich.c qui marche pas
l’idée c'est d'ajouter la lecture des variables au premier programme et leur contenu dans le "toto.c" généré
Code :
|
Marsh Posté le 10-05-2011 à 11:50:03
Ca devient nébuleux... C'est pour un nouveau concept de programme à compilation auto-récursive ?
Marsh Posté le 10-05-2011 à 12:04:06
Je sais pas en fait ce que ça veut dire une compilation auto-récursive..
l'objectif est de ne pas être obligé à retaper des variables pendant chaque compilation donc j'ai opté pour cette idée
je sais pas si ça pourra marcher...
Marsh Posté le 10-05-2011 à 12:27:31
Citation : l'objectif est de ne pas être obligé à retaper des variables pendant chaque compilation donc j'ai opté pour cette idée |
Si il y a une phase de recompilation systématique, on peut procéder ainsi:
1) Mettre dans un fichier.h les variables concernées (déclaration et valeur)
2) Inclure le fichier .h a la compilation
3) En fin d’exécution du programme, appeler une procédure rewrite_variable_file() qui va réécrire ce fichier .h avec les valeurs courantes
A+,
Marsh Posté le 10-05-2011 à 13:30:54
claude_tech a écrit : Je sais pas en fait ce que ça veut dire une compilation auto-récursive.. |
Ca ne veut rien dire du tout, ça n'existe pas. Du moins, ça n'existait pas jusqu'à aujourd'hui...
D'après le premier post, le programme est censé lire des variables pour se régénérer avec des valeurs "à jour". Mais ca veut donc dire que le code généré doit produire un programme qui fait la même chose. Donc c'est sans fin ?
Si c'est pour conserver la nouvelle valeur des variables, je ne comprends pas pourquoi ne pas produire un fichier séparé avec les valeurs modifiées, comme on fait classiquement. En informatique, un programme est distinct des données qu'il manipule. C'est un principe essentiel pour ne pas avoir à recompiler à chaque fois qu'un utilisateur "change une virgule".
Marsh Posté le 10-05-2011 à 15:07:08
gilou votre solution semble une bonne idée
"1) Mettre dans un fichier.h les variables concernées (déclaration et valeur)"
est ce que ce fichier.h permettra de lire ces variables pour la première exécution?? comment?
@+
Marsh Posté le 10-05-2011 à 15:12:08
shaoyin oui le code doit produire un autre code qui fait la même chose sauf que ce dernier doit utiliser les variables lis lors de exécution du premier programme
ça reste juste une idée mais apparemment sa réalisation n'est pas encore possible pour moi...
si on génère le fichier avec juste les valeurs séparés comment est ce que on peut dire au compilateur d'utiliser ces valeurs pour exécuter le programme et non pas attendre les valeurs qu'on va taper???
Marsh Posté le 10-05-2011 à 15:24:26
claude_tech a écrit : shaoyin oui le code doit produire un autre code qui fait la même chose sauf que ce dernier doit utiliser les variables lis lors de exécution du premier programme |
le compilateur n'exécute pas le programme, il traduit simplement ton code source en fichier objet ( qui seront utilisés par le linker pour générer l'exécutable).
Pour effectuer ce que tu souhaites faire , c'est très simple :
- tu testes l'existence de ton fichier qui va contenir tes variables
- s'il n'existe pas, tu demandes à l'utilisateur de saisir les valeurs d'initialisation, puis tu enregistres celles-ci dans un fichier
- s'il existe, tu sautes l'étape de demander à l'utilisateur de saisir les valeurs d'initialisation, et tu initialises directement tes variables avec le contenu du fichier.
Un hic cependant, tu ne pourras jamais modifier la valeur d'une variable à partir du moment où elle aura été saisie une fois. Dans ce cas , soit la valeur peut être modifié ultérieurement dans le programme ( et tu enregistres dans le fichier à chaque fois qu'elle peut être modifée), soit au démarrage du programme, tu rajoutes une condition supplémentaire : celle de poser la question à l'utilisateur pour savoir s'il veut saisir une variable, ou s'il souhaite utiliser les précédentes ( si elles existent ).
Marsh Posté le 10-05-2011 à 15:56:09
Pourquoi tu stockes aps les valeurs des variables dans un fichier texte ou binaire qui sera lu au démarrage du programme Ca serait quand même vachement plus simple et logique, non?
Marsh Posté le 10-05-2011 à 16:03:19
Je commence à penser comme xilebo : peut-être que claude_tech croit que le compilateur est un "interpréteur" de code source.
Vu sous cet angle, l'étrangeté de sa démarche peut s'expliquer. Si c'est pas ça, ben je vois pas du tout l'application pratique de ce genre de truc ! Autant utiliser lex/yacc ou des outils du même genre.
Marsh Posté le 10-05-2011 à 16:04:28
claude_tech a écrit : gilou votre solution semble une bonne idée |
Si j'ai un fichier
toto.h
/* **** toto.h ** */
int myvar = 5;
#define MYVAR_DEFINED
/* ********* */
et que dans le programme C je fais
#include "toto.h"
je vois pas ou est le problème.
surtout que tu peux tester
#ifndef MYVAR_DEFINED
int myvar;
// du code pour demander la valeur a l'utilisateur
#endif
A+,
Marsh Posté le 10-05-2011 à 16:05:28
Pareil, je pense qu'il ne sais pas ce qu'est un compilateur.
Du coup, pour qu'il se couche moins bête ce soir => http://fr.wikipedia.org/wiki/Compilateur
Marsh Posté le 10-05-2011 à 16:09:32
@gilou : D'un point de vue académique, c'est sûr que c'est faisable, mais c'est vraiment se compliquer la vie pour un intérêt qui reste à démontrer. Personnellement, c'est l'exotisme du problème qui me perturbe.
Marsh Posté le 10-05-2011 à 16:11:22
shaoyin a écrit : @gilou : D'un point de vue académique, c'est sûr que c'est faisable, mais c'est vraiment se compliquer la vie pour un intérêt qui reste à démontrer. Personnellement, c'est l'exotisme du problème qui me perturbe. |
On est d'accord sur ce point
Ça n'a pas le moindre intérêt, par rapport a une solution standard ou on sauve/relit un fichier.
A+,
Marsh Posté le 10-05-2011 à 16:28:04
oui tu as raison, c'est ça la tache que le programme doit accomplir
c'est simple comme tu le dis, mais j'ai eu du mal à m'exprimer ou peut être je comprenais pas bien ce que je voulais
maintenant j'aurai deux problèmes :
+comment enregistrer les valeurs tapés dans un fichier
+et comment utiliser ce contenu en cas de besoin (dans le cas ou l'utilisateur voudra utiliser les précédentes valeurs)
Code :
|
voila...apparemment mon programme ne fait que créer le fichier....c'est ce que je peux faire avec mon niveau
Merci
cette réponse est pour xilebo...
Marsh Posté le 10-05-2011 à 16:33:51
Tente d'ouvrir le fichier en lecture. Si ce n'est pas possible (resultat de fopen == NULL), lis depuis stdin et ecrit le fichier (a rouvrir en ecriture) avec les valeurs lues, sinon lis depuis le fichier.
Marsh Posté le 10-05-2011 à 16:39:32
voile l’intérêt de ce que je veux faire :
-je veux un programme qui lit des valeurs " valeurs initiales" pour réaliser certaines taches
-je veux pas retaper ces "valeurs initiales" à chaque fois que je veux utiliser ce programme
-je veux que ces valeurs tapés "se mémorisent" d'une certaine façon de telle sorte les utiliser sur mon programme à chaque fois que je le veux
Du moment que je dois taper plusieurs valeurs initiales, ça ne sera pas son intérêt si j'arrive à réaliser ceci..
Merci
Marsh Posté le 10-05-2011 à 16:46:47
Tente d'ouvrir un fichier avec un nom fixe.
S'il existe, lis les valeurs depuis le fichier.
S'il n'existe pas ou que la lecture a un probleme, demande les valeurs et ecrits les dans le fichier pour la prochaine execution.
Marsh Posté le 10-05-2011 à 16:51:34
claude_tech a écrit : voile l’intérêt de ce que je veux faire : |
Ca c'est juste un fichier de données lu par le programme.
A+,
Marsh Posté le 10-05-2011 à 17:00:19
Un Programmeur a écrit : Tente d'ouvrir un fichier avec un nom fixe. |
Voila c'est exactement ce que je ne sais pas faire
ce que je peux faire c'est de créer un fichier
mais comment faire pour lire les valeurs depuis ce fichier ??
et comment faire pour les écrire??
Code :
|
Marsh Posté le 10-05-2011 à 17:01:37
gilou a écrit : Ca c'est juste un fichier de données lu par le programme. |
et comment faire pour réaliser ceci??
fscanf??
Marsh Posté le 10-05-2011 à 17:03:51
Gagne.
Marsh Posté le 10-05-2011 à 17:03:53
Utilise les fonctions "fread" et "fwrite" pour les opérations d'entrée / sortie dans ton fichier.
EDIT : Ah oui, y'a "fscanf" aussi...
Marsh Posté le 10-05-2011 à 17:09:15
shaoyin a écrit : Utilise les fonctions "fread" et "fwrite" pour les opérations d'entrée / sortie dans ton fichier. |
puisqu'il y a fprintf ..pourquoi pas fscanf
"c'est les imbéciles qui sachent tout", c'est ce que dit notre prof d'info lorsqu'il fait une telle erreur
Marsh Posté le 10-05-2011 à 00:37:09
Bonjour,
voila je voudrais savoir si cette idée est réalisable :
un programme qui lit une variable par exemple : scanf ("%s",&A)
on donne par exemple A=200
est ce que c'est possible que le programme se rappelle de cette valeur pour une autre exécution ??
c'est à dire utiliser A comme 200 sans avoir besoin de l'introduire??
Si oui une clarification serait la bienvenue ^^
Merci