Stockage de valeur dans un tableau a partir d'un fichier
Résolu
aaa
-
Aaa -
Aaa -
bonjour, j'ai un fichier contenant des chiffre de 1 a 9, et deux type de caractere qui sont "." et "*", je dois lire ce fichier et stocker les valeurs dans un tableau de type entiers. j'ai commencer l'ecriture du programme mais quand j'affiche mon tableau je vois qu'il na pas du tout pris les valeurs qui sont dans mon fichier.
quelqu'un pourrait il me dire d'ou vient mon erreur. merci
le SUDOKU est un struct qui est mon tableau d'entiers a deux dimension
quelqu'un pourrait il me dire d'ou vient mon erreur. merci
le SUDOKU est un struct qui est mon tableau d'entiers a deux dimension
SUDOKU lire_fichier (char *nom) { SUDOKU S; FILE *f= fopen(nom, "r"); int i,j; char c; for(i=0;i<9;i++){ for(j=0; j<9; j++){ c=fscanf(f,"%c",&c); if(c=='.'){ S.gl[i][j]=0; } if(c=='*'){ c= fscanf(f,"%c",&c); S.gl[i][j]=atoi(&c); } else { S.gl[i][j]=atoi(&c); } } } return S; }
A voir également:
- Stockage de valeur dans un tableau a partir d'un fichier
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Tableau word - Guide
1 réponse
Salut aaa,
Si ton
Le plus simple est que la fonction appelante de
Ton prototype deviendrait
Donc
Et, bien sûr, tu n'as plus de
Dal
Si ton
SUDOKU Sest un
struct, en le déclarant comme variable automatique à l'intérieur de ta fonction, il devient en dehors du scope en sortant de la fonction.
Le plus simple est que la fonction appelante de
lire_fichier()déclare
SUDOKU Set qu'elle passe à
lire_fichier()un pointeur sur celle-ci, afin que ta fonction puisse en modifier le contenu. Ainsi, le contenu modifié sera accessible à la fonction appelante.
Ton prototype deviendrait
void lire_fichier (char *nom, SUDOKU *S);, tu supprimes ta déclaration en ligne 2 de
SUDOKU S;et dans ta fonction, tu accèdes aux membres de la
structpointée par S avec la notation
->au lieu du point.
Donc
S->gl[i][j]=0;au lieu de
S.gl[i][j]=0;... etc.
Et, bien sûr, tu n'as plus de
return S;en fin de fonction.
Dal
http://www.cplusplus.com/reference/cstdlib/atoi/
quand j'essaye avec le pointeur le compilation ne se fait plus et j'ai un message d'erreur qui est " warning control reaches end of non-void function".
pour le atoi, est ce que je devrais utiliser le code ascii pour convertir un char en int?
Pour convertir un char (qui est un type entier), tu peux utiliser la façon suivante puisque le C requiert que les codes entiers correspondant aux char représentant '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' soient des entiers consécutifs.
donne sur ma machine
ma machine, comme la tienne probablement (53 étant le code ASCII de '5')
Dal
Tu peux le faire directement si tu le veux, c'est à toi de voir et de gérer ton code comme tu l'entends.
Que ce que tu fasses soit un exercice ou une application réelle, tu dois prendre tes responsabilités :-)
Maintenant, si tu as un utilisateur qui met "Z" à la place d'un chiffre dans un fichier, tu vas avoir des valeurs inattendues dans ta et, dans un programme en production auquel on demande de la robustesse, on devrait faire ce genre de vérifications avant de mettre des choses dans une structure de données que le programme va réputer conformes ...
Cet aspect de ton code ne concerne pas que la conversion du en , mais tout le reste. Par exemple, tu ne vérifies pas que le fichier a été correctement ouvert avec , ni que n''a pas produit d'erreurs ... cela réduit évidemment le niveau de robustesse et de fiabilité de ce que tu écris.