Rechercher : dans
Par :

Fichier texte a partir de tableau (C)

Dernière réponse le 19 fév 2008 à 13:01:31 mich62120, le 18 fév 2008 à 16:59:13 
 Signaler ce message aux modérateurs

Bonjour,

Je souhaiterai remplir un fichier texte avec des valeurs comprises dans un tableau deux dimensions.
Voici mon scripte:

#include <stdio.h>
/*void remplirBDD();*/

int main(){
int i;
/*remplirBDD();*/
FILE* file;
char filename[256];
int tab[25][2];

int tmp;
/*remplissage bidon*/
for(tmp=0 ; tmp<25 ; i++ ){
tab[tmp][1]=tmp;
tab[tmp][2]=tmp*5;}

sprintf((char *) &filename,"create.txt");



for( i=0 ; i<25 ; i++ )
{

file = fopen(filename,"a");
if (file) fprintf(file,"%d %d\n",tab[i][1],tab[i+1][2]);
else fprintf(stderr,"Erreur : ne peut pas ouvrir %s\n",filename);
fclose(file);
}


return 1;}

A chaque execution j'ai une fenete DOS qui s'ouvre (ou je peux strictement rien faire )et cela reste bloqué.Le fichier ne se crée même pas.
Je ne vois pas du tout d'ou peut venir le problème si vous pouvez m'aider

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « fichier texte a partir de tableau (C) » dans :
[MS-Dos] Ecrire dans un fichier texte en batch VoirPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" : echo texte_à_ecrire > fichier_de_sortie.txt Pour écrire à la fin d'un texte existant (concaténation) : echo "écriture a la fin du fichier ">>...
Les balises HTML VoirHTML, un langage à balises Le HTML n'est pas un langage de programmation. Il s'agit d'un langage permettant de décrire la mise en page et la forme d'un contenu rédigé en texte simple. Une page HTML est ainsi un simple fichier texte...
Qu'est-ce qu'un fichier? VoirQu'est-ce qu'un fichier? Un fichier est une suite d'informations binaires, c'est-à-dire une suite de 0 et de 1. Ce fichier peut être stocké pour garder une trace de ces informations. Un fichier texte est un fichier composé de caractères stockés...
Fichier TXT VoirFormat TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.

1

tatou_38, le 18 fév 2008 à 18:41:26

Ce sprintf() ne peut que planter :
sprintf((char *) &filename,"create.txt");
écris plutôt : strcat( filename , "create.txt" );

Tu peux ouvrir ton fichier 1 seule fois avant la boucle for(), et le refermer 1 seule fois après cette même boucle

En C, les indices de tableau commencent à 0 et non à 1 (remarque)

Slts !
tatou_38
Angers

Répondre à tatou_38

2

Mahmah, le 18 fév 2008 à 18:52:14

Bonjour,

En fait strcat plantera aussi dans ce cas à moins de mettre un '\0' en premier caractère dans filename, mais de toute façon ce n'est pas une concaténation que tu veux faire.

Le point fautif est le '&' dans ton sprintf, et c'est probablement pour cela que tu as du caster en (char *) car ton compilo se retrouve avec un char ** pour un paramètre de type char *.

Voilou.

Oui sinon, idem, ouvrir le fichier une seule fois en mode écriture (w), tout écrire, fermer.
et ++ aussi, un tableau de taille 2 (par exemple) possède deux éléments, a[0] et a[1];


M.

Répondre à Mahmah

3

tatou_38, le 18 fév 2008 à 18:54:51

Meaculpa, il faut utiliser strcpy() et non strcat(), bien évidement !

sprintf() n'a aucun intérêt pour copier une chaîne.
tatou_38
Angers

Répondre à tatou_38

4

 mich62120, le 19 fév 2008 à 13:01:31

Merci pour votre aide j'ai corrigé les erreurs signalées et quelques autres erreurs d'inattention (i++ a lieu de tmp++ dans le for :$) et ca marche.
Bonne continuation.
MICH

Répondre à mich62120