IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Enregister une donnée entrée par l'utilisateur


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Enregister une donnée entrée par l'utilisateur
    Bonjour !

    Je voudrais savoir si il est possible d'enregistrer une donnée entré par l'utilisateur dans le programme même.
    Par exemple, comme un scanf(%i,&c), mais je souhaiterais que lorsque l'on arrête le programme, si on le relance, la valeur attribué à c serat toujours la même entré par l'utilisateur précédemment.
    Je ne sais vraiment pas si c'est possible donc je demande.

    Merci!

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Dans le programme, non, ce n'est pas possible.

    Par contre, tu peux stocker cette données à l'extérieur du programme et cela peut être dans un fichier, dans la base de registre, ou tout autre support et méthode disponible.

    Il suffit ensuite que lorsque tu relances ton programme, de tester si la donnée est écrite quelque part, si oui, tu la charges et tu continues.

    Le plus simple dans ton cas serait d'utiliser les fichiers.
    Regarde les fonction fopen(), fprintf(), fclose() et fscanf() et n'hésite pas à regarder dans les tutoriels du site
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci c'est exactement ce que je souhaitais !
    Par contre je n'ai pas du tout le niveau, je ne comprend rien ^^.
    Imaginons que je souhaites créer un fichier inexistant sur mon disque C:\, appelé essai, et attribuer à "c", un entier inexistant dans ce fichier, une valeur entrée par l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    int main()
    {
    int c;
    fopen("c:\\essai","r+");
    /*le fichier est crée et ouvert*/
    scanf("%i",&c);
    /*j'obtiens la valeur de c*/
    frpintf("c:\\essai","c=%i;\n",c);
    /*je l'enregistre sur le fichier*/
    return 0;
    }
    Et la j'ai l'air stupide :S!
    Merci!

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je te fais l'écriture dans le fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    /* cette fonction ecrit la valeur passée en paramètre dans le fichier c:\essai.txt */
    /* elle retourne -1 en cas d'erreur */
    /* et 0 si tout se passe bien */
    int EcrireValeur(int Valeur)
    {
    FILE *fp;
       /* ouverture du fichier */
       fp = fopen("c:\\essai.txt", "w");
       if(fp == NULL)
       {
          /* erreur d'ouverture du fichier */
          return -1;
       }
     
       /* ecriture du nombre */
       fprintf(fp, "%d", Valeur);
     
       /* fermeture du fichier */
       fclose(fp);
     
       /* retour de la fonction, tout est bon */
       return 0;
    }
    Voilà, maintenant, à toi pour la lecture, tu utilises fopen(), fscanf() et fclose().
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Magnifique ! J'arrive maintenant a afficher ce que je veux dans le fichier, merci beaucoup!
    Par contre pour le fscanf c'est une autre pair de manche.
    Voila ce que je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    /* cette fonction récupère la valeur passée en paramètre dans le fichier c:\essai.txt */
    /* elle retourne -1 en cas d'erreur */
    /* et 0 si tout se passe bien */
    int EcrireValeur(int Valeur)
    {
    FILE *fp;
       /* ouverture du fichier */
       fp = fopen("c:\\essai.txt", "r+");
       if(fp == NULL)
       {
          /* erreur d'ouverture du fichier */
          return -1;
       }
     
       /* enregistre le nombre dans l'entier c*/
       int c;
       fscanf(fp,"%i",&c);
     
       /* fermeture du fichier */
       fclose(fp);
     
       /* retour de la fonction, tout est bon */
       return 0;
    }
    int main ()
    {
    int c;
    EcrireValeur(1);
    printf("%i\n",c);
    return 0 ;
    }
    Avec ce programme j'obtiens 1628447136 au lieu de 5^^.
    Mais il y a encore certaines choses que je ne comprend pas, par exemple, comment le programme sais quelle valeur prendre. J'ai donc essayé plusieurs manières, par exemple en essayant de prendre la valeur de c tel que dans le programme il y ait écrit : c=5; mais ca ne marche pas.
    Et puis dans ce programme je ne me sert pas de Valeur, il est juste la pour lancer la fonction, et je ne sais pas si c'est normal.

    Sinon pour comprendre je souhaitais savoir ce que voulais dire FILE, enfin pourquoi faut-il le mettre. Même chose pour fp, mais je crois que c'est le stream!?

  6. #6
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Peut être qu'un exemple regroupant les deux fonctions de lecture/écriture t'aiderais à comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    #include <stdio.h>
     
    /* cette fonction ecrit la valeur passée en paramètre dans le fichier c:\essai.txt */
    /* elle retourne -1 en cas d'erreur */
    /* et 0 si tout se passe bien */
    int EcrireValeur(int Valeur)
    {
    	FILE *fp;
    	/* ouverture du fichier */
    	fp = fopen("c:\\essai.txt", "w");
    	if(fp == NULL)
    	{
    		/* erreur d'ouverture du fichier */
    		return -1;
    	}
     
    	/* ecriture du nombre */
    	fprintf(fp, "%d", Valeur);
     
    	/* fermeture du fichier */
    	fclose(fp);
     
    	/* retour de la fonction, tout est bon */
    	return 0;
    }
     
    /* cette fonction met la valeur lue depuis le fichier c:\essai.txt dans la variable passée en paramètre */
    /* elle retourne -1 en cas d'erreur */
    /* et 0 si tout se passe bien */
    int LireValeur(int *Valeur)
    {
    	FILE *fp;
    	/* ouverture du fichier */
    	fp = fopen("c:\\essai.txt", "r");
    	if(fp == NULL)
    	{
    		/* erreur d'ouverture du fichier */
    		return -1;
    	}
     
    	/* enregistre le nombre dans l'entier c*/
    	fscanf(fp,"%d",Valeur);
     
    	/* fermeture du fichier */
    	fclose(fp);
     
    	/* retour de la fonction, tout est bon */
    	return 0;
    }
    int main ()
    {
    	int in=500;
    	int out=0;	
     
    	if( EcrireValeur(in)==0 ) 
    	{
    		if( LireValeur(&out)==0 ) 
    		{
    			printf("%d\n",out);
    		}
    	}
     
    	return 0 ;
    }
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Il y a toujours quelque chose que je ne comprend pas :
    Pourquoi ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (...)
    int LireValeur(int Valeur) /*pas d'étoile*/
    (...)
    fscanf(fp,"%d",&Valeur); /*ajout de &*/
    (...)
    C'est ce que logiquement j'aurais mis, je ne vois pas le problème..

    Je me demandais aussi comment la fonction LireValeur pouvait prendre la bonne valeur dans le essai.txt (imaginons que l'on souhaite stocker beaucoup de données). Mais je vais chercher déjà de mon coté au lieu de demander réponse à tous!

    Un grand merci !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    En faite le * devant "Valeur" de la fonction "LireValeur" dis que :
    -Valeur est un entier ?
    et?
    -il sera précédé de quelque chose, peut importe ce que c'est ?

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par j0nj0n Voir le message
    Il y a toujours quelque chose que je ne comprend pas :
    Pourquoi ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (...)
    int LireValeur(int Valeur) /*pas d'étoile*/
    (...)
    fscanf(fp,"%d",&Valeur); /*ajout de &*/
    (...)
    C'est ce que logiquement j'aurais mis, je ne vois pas le problème..
    http://emmanuel-delahaye.developpez....difie_variable
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2007, 21h11
  2. Réponses: 4
    Dernier message: 25/05/2007, 17h04
  3. requête access (test d'une valeur entrée par l'utilisateur)
    Par ben5985 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 30/11/2006, 08h39
  4. Réponses: 2
    Dernier message: 03/10/2005, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo