Lecture et ecriture de variables dans un fichier (save)

Description

Salut la-dedans !

Cette source s'adresse aux personnes (debutantes) qui voudraient écrire dans un fichier les valeurs de differents type de variables (comme "124" (int) , "0.1" (float),...) et pouvoir après être capable de les lire.

Je n'ai pas vu de source semblable sur le site, malgré sa simplicité affligente, alors je me suis permis de la mettre. Très utile pour les sauvegardes dans des petits jeux. Donc voila voila ;)

Le prog lancé, allez dans le menu 1 et tapez différentes valeurs. Ceci fini, lorsque vous irez dans le menu 2, les valeurs inscrites dans le fichiers seront lues, selon leur type (int, long, float) et affichée a l'écran.

Bonne prog', a+ !

Source / Exemple :


// Includes
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

// Variables :
int mn_choice;
bool quitMsg=false; // True -> Quitte l'App

int nb_player_lives;
long score_player;
int current_level;
float player_x,player_y,player_z;
 

// Fonctions
int show_menu();
int create_savefile();
int read_savefile();

int main()
{
	
	do{
		show_menu();
	}while(!quitMsg);

	return 1;
}

int create_savefile()
{
	// Pointeur fichier
	FILE *svf;

	// Nombre de vies :
	printf("\nSimulation :\n\n\t* Nombre de vie(s) du joueur (int) : ");
	scanf("%d",&nb_player_lives);

	// Score
	printf("\t* Score (long): ");
	scanf("%ld",&score_player);

	// Niveau courant
	printf("\t* Niveau courant (int) :");
	scanf("%d",&current_level);

	// X position (peut-être un nombre flottant)
	printf("\t* X Position (float) : ");
	scanf("%f",&player_x);
	
	// Y position (peut-être un nombre flottant)
	printf("\t* Y Position (float) : ");
	scanf("%f",&player_y);
	
	// Z position (peut-être un nombre flottant)
	printf("\t* Z Position (float) : ");
	scanf("%f",&player_z);

	// Ouvre le fichier en mode écriture
	svf=fopen("mygame.sav","w+");

	if(!svf) return -1;

	printf("\nLe fichier est prêt a être crée. Appuyez sur une touche pour continuer...\n");
	getch();
	printf("Création du fichier ... ");
	
	// Ecrit dans le fichier mygame.sav
	fprintf(svf,"%d %ld %d %f %f %f",nb_player_lives,score_player,current_level,player_x,player_y,player_z);
    
    // Fermeture du fichier
	fclose(svf);

	printf(" [OK!]\n\n");

	// Succès
	return 1;

}

int show_menu()
{
	printf("*****************************************\n");
	printf("* Tutorial : ECRITURE ET LECTURE DE     *\n");
	printf("*            VARIABLES AVEC FSCANF()    *\n");
	printf("*****************************************\n");
	printf("* Par Thomas PASCAL - thomas@lxgames.org*\n");
	printf("*****************************************\n");
	printf("*    1 - Creer le fichier mygame.sav    *\n");
	printf("*    2 - Lire le fichier mygame.sav     *\n");
	printf("*    3 - Bye-Bye !                      *\n");
	printf("*****************************************\n");
	scanf("%d",&mn_choice);

	if(mn_choice==1) create_savefile();

	if(mn_choice==2) read_savefile(); 

	if(mn_choice==3) quitMsg=true;

	return 1;
}

int read_savefile()
{
	FILE *svf_read;

	// Ici on reinitialise les variables dont on s'est servi pour creer le fichier
	
	current_level=0;
	nb_player_lives=0;
	score_player=0;
	player_x=0.0f;
	player_y=0.0f;
	player_z=0.0f;

	// On ouvre le fichier

	svf_read=fopen("mygame.sav","r");

	if(!svf_read){
		printf("\nVeuillez d'abord cree le fichier mysave.sav !\n\n");
		return -1;
	}

	// On recupere les valeurs des differentes variables dans le fichier
	// grace a la fonction fscanf
	fscanf(svf_read,"%d",&nb_player_lives);
	fscanf(svf_read,"%ld",&score_player);
	fscanf(svf_read,"%d",&current_level);
	fscanf(svf_read,"%f",&player_x);
	fscanf(svf_read,"%f",&player_y);
	fscanf(svf_read,"%f",&player_z);

	fclose(svf_read);

	printf("\n\nSauvegarde lue ! Affichage des valeurs lues :\n\n");
	printf(" - Vies : %d\n - Score : %ld\n - Le joueur est au niveau : %d",nb_player_lives,score_player,current_level);
	printf("\n - X : %f\n - Y : %f\n - Z : %f\n\n\n",player_x,player_y,player_z);

	return 1;

}

Conclusion :


Voila, je pense que vous n'aurez pas vraiment mal a la tête après avoir lu tout
ca :-p ... mais peut-être ca a aidé quelqu'un ..?..

Allé a+ et n'hésitez pour les questions.
(ou si qqchose foire)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.