Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1021 connectés 

  FORUM HardWare.fr
  Programmation
  C

  gestion de variables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

gestion de variables

n°2074880
claude_tec​h
Posté le 10-05-2011 à 00:37:09  profilanswer
 

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

mood
Publicité
Posté le 10-05-2011 à 00:37:09  profilanswer
 

n°2074883
ccp6128
Syntax error
Posté le 10-05-2011 à 02:17:18  profilanswer
 

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".

n°2074884
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 03:00:35  profilanswer
 

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 :
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Tie::File;
  5.  
  6.  
  7. my $A;
  8. tie my @array, 'Tie::File', "automod.pl" or die "cannot tie automod.pl: $!\n";
  9. for (@array) {
  10.  if (/^my \$A/) {
  11.    if (not defined($A)) {
  12.      print "A has no value\nPlease, enter a value: ";
  13.      $A = <STDIN>;
  14.      chop $A;
  15.      s/.*/my \$A=$A;/
  16.    } else {
  17.      print "A has value $A\nValue will be erased.";
  18.      s/.*/my \$A;/
  19.    }
  20.  }
  21. }
  22. untie @array;


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+,


Message édité par gilou le 10-05-2011 à 03:10:54

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2074905
claude_tec​h
Posté le 10-05-2011 à 10:04:31  profilanswer
 

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

n°2074920
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 10:38:19  profilanswer
 

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2074936
claude_tec​h
Posté le 10-05-2011 à 11:26:33  profilanswer
 

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 :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.                FILE *toto;
  7.                char n_fich[10];
  8.                char n[10];
  9.     printf("INSERT THE FILE NAME PLEASE : " );
  10.     scanf("%s", n);
  11.     strcat(n_fich,n);
  12.     strcat(n_fich,".c" );
  13.   toto = fopen(n_fich,"w" );
  14.   fprintf(toto,"#include <stdio.h>" );
  15.   fprintf(toto,"int main()" );
  16.   fprintf(toto,"{" );
  17.   fprintf(toto,"FILE *toto;" );
  18.   fprintf(toto,"char n_fich[10];" );
  19.   fprintf(toto,"char n[10];" );
  20.   fprintf(toto,"printf(" );
  21.   fputs(toto,'"');
  22.   fprintf(toto,"INSERT THE FILE NAME PLEASE :\n" );
  23.   fputs(toto,'"');
  24.   fprintf(toto," );" );
  25.   fprintf(toto,"scanf(" );
  26.   fputs(toto,'"');
  27.   fputs(toto,'%');
  28.   fprintf(toto,"s" );
  29.   fputs(toto,'"');
  30.   fprintf(toto,", n);" );
  31.   fprintf(toto," strcat(n_fich,n);" );
  32.   fprintf(toto,"strcat(n_fich," );
  33.   fputs(toto,'"');
  34.   fprintf(toto,".c" );
  35.   fputs(toto,'"');
  36.   fprintf(toto," );" );
  37.   fprintf(toto,"toto = fopen(n_fich," );
  38.   fputs(toto,'"');
  39.   fprintf(toto,"w" );
  40.   fputs(toto,'"');
  41.   fprintf(toto," );" );
  42.   fprintf(toto,"Hello" );
  43.   fprintf(toto,"fclose(toto);" );
  44.   fprintf(toto,"return(0);" );
  45.   fprintf(toto,"}" );
  46.   fclose(toto);
  47.   return(0);
  48. }


n°2074941
shaoyin
Posté le 10-05-2011 à 11:50:03  profilanswer
 

Ca devient nébuleux... C'est pour un nouveau concept de programme à compilation auto-récursive ?

n°2074945
claude_tec​h
Posté le 10-05-2011 à 12:04:06  profilanswer
 

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... :??:

n°2074950
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 12:27:31  profilanswer
 

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+,


Message édité par gilou le 10-05-2011 à 12:28:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2074960
shaoyin
Posté le 10-05-2011 à 13:30:54  profilanswer
 

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".

mood
Publicité
Posté le 10-05-2011 à 13:30:54  profilanswer
 

n°2075007
claude_tec​h
Posté le 10-05-2011 à 15:07:08  profilanswer
 

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?
 
@+

n°2075009
claude_tec​h
Posté le 10-05-2011 à 15:12:08  profilanswer
 

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???

n°2075010
xilebo
noone
Posté le 10-05-2011 à 15:24:26  profilanswer
 

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
ç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???


 
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 ).

n°2075018
rufo
Pas me confondre avec Lycos!
Posté le 10-05-2011 à 15:56:09  profilanswer
 

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?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2075023
shaoyin
Posté le 10-05-2011 à 16:03:19  profilanswer
 

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.

n°2075024
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 16:04:28  profilanswer
 

claude_tech a écrit :

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?
 
@+


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+,


Message édité par gilou le 10-05-2011 à 16:10:00

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2075027
rufo
Pas me confondre avec Lycos!
Posté le 10-05-2011 à 16:05:28  profilanswer
 

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   ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2075033
shaoyin
Posté le 10-05-2011 à 16:09:32  profilanswer
 

@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.

n°2075034
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 16:11:22  profilanswer
 

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2075046
claude_tec​h
Posté le 10-05-2011 à 16:28:04  profilanswer
 

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 :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.                FILE *toto;
  7.                char n_fich[10];
  8.                char n[10];
  9.                float A,B;
  10.     printf("INSERT THE FILE NAME PLEASE : " );
  11.     scanf("%s", n);
  12.     printf("Donner A :" );
  13.     scanf("%s",&A);
  14.     printf("Donner B :" );
  15.     scanf("%s",&B);
  16.     strcat(n_fich,n);
  17.     strcat(n_fich,".txt" );
  18.   toto = fopen(n_fich,"w" );
  19.   fclose(toto);
  20.   return(0);
  21. }


 
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...


Message édité par claude_tech le 10-05-2011 à 16:33:07
n°2075049
Un Program​meur
Posté le 10-05-2011 à 16:33:51  profilanswer
 

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.


Message édité par Un Programmeur le 10-05-2011 à 16:34:21

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2075054
claude_tec​h
Posté le 10-05-2011 à 16:39:32  profilanswer
 

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

n°2075060
Un Program​meur
Posté le 10-05-2011 à 16:46:47  profilanswer
 

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.
 


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2075063
gilou
Modérateur
Modzilla
Posté le 10-05-2011 à 16:51:34  profilanswer
 

claude_tech a écrit :

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

Ca c'est juste un fichier de données lu par le programme.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2075067
claude_tec​h
Posté le 10-05-2011 à 17:00:19  profilanswer
 

Un Programmeur a écrit :

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.
 


 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 :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.                FILE *toto;
  7.                char n_fich[10];
  8.                char n[10];
  9.                float A,B;
  10.     printf("INSERT THE FILE NAME PLEASE : " );
  11.     scanf("%s", n);
  12.     printf("Donner A :" );
  13.     scanf("%s",&A);
  14.     printf("Donner B :" );
  15.     scanf("%s",&B);
  16.     strcat(n_fich,n);
  17.     strcat(n_fich,".txt" );
  18.   toto = fopen(n_fich,"w" );
  19.   fclose(toto);
  20.   return(0);
  21. }

n°2075069
claude_tec​h
Posté le 10-05-2011 à 17:01:37  profilanswer
 

gilou a écrit :

Ca c'est juste un fichier de données lu par le programme.
A+,


 
 
et comment faire pour réaliser ceci??
fscanf??

n°2075071
Un Program​meur
Posté le 10-05-2011 à 17:03:51  profilanswer
 

Gagne.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2075072
shaoyin
Posté le 10-05-2011 à 17:03:53  profilanswer
 

Utilise les fonctions "fread" et "fwrite" pour les opérations d'entrée / sortie dans ton fichier.
 
EDIT : Ah oui, y'a "fscanf" aussi... ;)

Message cité 1 fois
Message édité par shaoyin le 10-05-2011 à 17:05:17
n°2075076
claude_tec​h
Posté le 10-05-2011 à 17:09:15  profilanswer
 

shaoyin a écrit :

Utilise les fonctions "fread" et "fwrite" pour les opérations d'entrée / sortie dans ton fichier.
 
EDIT : Ah oui, y'a "fscanf" aussi... ;)


   :pt1cable:  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  :p

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  gestion de variables

 

Sujets relatifs
[VBA] Gestion d'une plage de donnéegestion des erreurs venant de différentes couches
Access et gestion d'accès à une tableFichier .bat : problème de gestion des variables
gestion des variables dans une dll multithread ?Pb avec gestion des variables
Gestion de nom de variables dynamique (rapide... help)ouvrir une nouvelle fenetre automatiquement + gestion des variables ?
[PHP] gestion des variables php avec Communicator????[ASP] Gestion des variables de Session
Plus de sujets relatifs à : gestion de variables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR