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

  FORUM HardWare.fr
  Programmation
  C

  remise a zero d'un tableau ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

remise a zero d'un tableau ?

n°934330
Daniel59
Posté le 30-12-2004 à 18:48:18  profilanswer
 

Salut,
 
Comment puis je remettre mon tableau a zero ?
doi-je passer par une boucle obligatoirement?
les 2 tableau que je ve remettre a zero,je les ai déclarer ainsi:
 
char tab2[60]={0};
char tab3[60]={0};
 
svp, merci

mood
Publicité
Posté le 30-12-2004 à 18:48:18  profilanswer
 

n°934332
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 18:49:57  profilanswer
 

Daniel59 a écrit :


Comment puis je remettre mon tableau a zero ?
doi-je passer par une boucle obligatoirement?
les 2 tableau que je ve remettre a zero,je les ai déclarer ainsi:


char tab2[60]={0};
char tab3[60]={0};




La boucle est une solution, sinon memset() fonctionne aussi.


Message édité par Emmanuel Delahaye le 30-12-2004 à 18:50:29

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°934339
matafan
Posté le 30-12-2004 à 19:01:57  profilanswer
 

Ou bzero(), au choix. La boucle est une moins bonne solution.
 
Edit : j'avais jamais remarque mais comme l'a dit Emmanuel bzero n'est pas standard, et en plus c'est deprecie. Donc memset().


Message édité par matafan le 30-12-2004 à 19:31:45
n°934347
Daniel59
Posté le 30-12-2004 à 19:09:26  profilanswer
 

G opté pour le memset:
 
memset(tab2, '\0', strlen(tab2) - 1);
memset(tab3, '\0', strlen(tab3) - 1);
 
seul bleme, si le tableau est deja a zero ça plante, je l'é mi en fin de mon while avec une condition!
 
matafan keske le bzero(), c'est une fonction ke je doi creer tu ve dire? parce que yé pas dans mon index.

n°934350
matafan
Posté le 30-12-2004 à 19:17:04  profilanswer
 

Bon alors plusieurs remarques la :
 
1) memset prend un int, pas un char. Donc met simplement 0 au lieu de '\0'
 
2) Si ton tab2[0] == 0 alors strlen te renvoit 0. Et passer -1 a memset, ca lui fait mettre a 0 les 4294967295 octets qui suivent tab2.
 
3) J'ai l'impression que tu traites tes tableau comme des chaines. Si c'est le cas et si tu veux simplement mettre une chaine vide dans ton tableau, pas besoin de memset ou bzero : tab2[0] = '\0' suffit.
 
PS : bzero c'est un fonction de la libc tout comme memset, et elle est declaree dans strings.h tout comme memset.


Message édité par matafan le 30-12-2004 à 19:18:07
n°934357
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 19:24:24  profilanswer
 

matafan a écrit :

Ou bzero(), au choix. La boucle est une moins bonne solution.


bzero() n'est pas standard.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°934358
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 19:28:32  profilanswer
 

Daniel59 a écrit :

G opté pour le memset:


memset(tab2, '\0', strlen(tab2) - 1);
memset(tab3, '\0', strlen(tab3) - 1);




Non!


#include <string.h>
<...>
memset(tab2, 0, sizeof tab2);
memset(tab3, 0, sizeof tab3);


Mais si ces tableaux sont utilisés dans le contexte 'chaine de caractères', la méthode simple et rapide de créer une chaine vide est


*tab2 = 0;
*tab3 = 0;


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°934361
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 19:32:21  profilanswer
 

matafan a écrit :


1) memset prend un int, pas un char. Donc met simplement 0 au lieu de '\0'


C'est pareil. Un caractère littéral est un int en C.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°934370
Daniel59
Posté le 30-12-2004 à 20:11:44  profilanswer
 

Bon, euh bah
tab2[0] = '\0'; ou *tab2 = 0; ça marche po
soit mon prog plante, soit c mon editeur ki se fé totalment jette par XP, lol!
un pe d'aide sur la fonction de mon prog vous aidera surement:
http://www.chez.com/pyro2000/help/mdp.txt

n°934379
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 20:39:53  profilanswer
 

Daniel59 a écrit :

Bon, euh bah
tab2[0] = '\0'; ou *tab2 = 0; ça marche po
soit mon prog plante, soit c mon editeur ki se fé totalment jette par XP, lol!
un pe d'aide sur la fonction de mon prog vous aidera surement:
http://www.chez.com/pyro2000/help/mdp.txt


 

Citation :


int controleacces(void)
{
FILE *fp;
char login[30];
char mdp[20];
char separ=',';
char tab[60]={0};
char tab2[60]={0};
char tab3[60]={0};
char car;
int i=0,j=0,k=0,l=0,ptr=1;
//int retour=0;
 
puts("Entrer votre login :" );
scanf("%s", login);
     
puts("Entrer votre mdp :" );
scanf("%s", mdp);


Trou de sécurité (pour un login/mdp, c'est intéressant...)
 
Pour saisir une ligne, il vaut mieux utiliser fgets(). Détails ici:
 
http://mapage.noos.fr/emdel/notes.htm#saisie

Citation :


fp=fopen(LINK,"a+" );


Pourquoi "a+" et non "a" ? C'est un truc à casser un fichier...
 
Le reste parait extrèmement complexe pour une simple vérification de login/mot de passe...
 
Dans le fichier :  
 
login<espace>mot-de-passe
 
Lire ce fichier :  
 
fgets()
sscanf() avec "%s %s""
 
comparaison : strcmp() dès qu'on a le login, on vérifie le mdp...
 
rien de compliqué.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 30-12-2004 à 20:39:53  profilanswer
 

n°934390
Daniel59
Posté le 30-12-2004 à 20:56:27  profilanswer
 

Arf, justement c plu compliké ke ça, et je ve bien suivre le cahier des charges.
Le fichier texte se compose ainsi:
nom,mdp,etat(utilisateur ou superutilisateur)
 
la fonction compare donc nom et mot de passe et aprés retournera 1 si c un utilisateur et 2 si c un superutilisateur, mais ça g pas encore fé!
et il est vrai ke l'histoire de virgule pe etre dur a comprendre mais ça marche!
sinon pour remettre les tablo a zero je reste sur mes memset de départ qui fonctionne bien

n°934414
Daniel59
Posté le 30-12-2004 à 22:07:03  profilanswer
 

Bon il n'y a plu de rapport avec le sujet, mais bon maintenant ke t'a vu ma fonction
Je ve utilisé un feof pour detecter la fin du fichier, mais il me retourne tjrs 0!
 
help, merci
g mi a jour le txt du lien plu haut.

n°934418
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 22:29:28  profilanswer
 

Daniel59 a écrit :

Bon il n'y a plu de rapport avec le sujet, mais bon maintenant ke t'a vu ma fonction
Je ve utilisé un feof pour detecter la fin du fichier, mais il me retourne tjrs 0!


Pourquoi  feof()? Qui t'as dit d'utiliser cette fonction ? Encore un prof à la masse ?
 
Pour déterminer si la lecture a été interrompue, il faut utiliser le code retourné par la fonction de lecture
 
fgets() -> NULL
fgetc() -> EOF


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°934419
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-12-2004 à 22:30:52  profilanswer
 

Emmanuel Delahaye a écrit :

Pourquoi  feof()? Qui t'as dit d'utiliser cette fonction ? Encore un prof à la masse ?
 
Pour déterminer si la lecture a été interrompue, il faut utiliser le code retourné par la fonction de lecture
 
fgets() -> NULL
fgetc() -> EOF


 
Au fait dans ton code, tu n'as rien corrigé. Je vois toujours des scanf(). (à moins que mon cache me joue des tours...)
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°934426
Daniel59
Posté le 30-12-2004 à 22:56:42  profilanswer
 

Laisser mon prof la ou il est, chui seul devant mon ecran, ya pas de prof!
 
Et puis keski ont mes scanf ?? de toute façon de ce coté g pas fini puisque des etoiles devront apparaitre pour le mot de passe.
Mais il fonctionne pour l'instant!
 
Sinon bah v voir pour fonction de lecture, va falloir changé un pe.
merci

n°934436
Daniel59
Posté le 30-12-2004 à 23:11:45  profilanswer
 

Voila donc ça marche, des do-while arrange l'affaire.(txt mi a jour)
Maintenant je doi mettre des etoile kan on tape le mot de passe...

n°934437
manatane
En vous remerciant, bonsoir
Posté le 30-12-2004 à 23:12:16  profilanswer
 

[:benou] scanf çà pue, utilise fgets ou getline (GNU) puis sscanf. Il te suffit de chercher un peu sur le net et psssst le C n'est pas fiable si tu ne vérifies pas le bonne usage de tes fonctions, tu as donc intéret à te renseigner un minimum (net, page de man, bouquins...) si tu veux t'y mettre sérieusement.
Pour le mot de passe je t'aurais bien conseillé getpass (sans etoile) mais c'est considéré comme obsoléte...


Message édité par manatane le 30-12-2004 à 23:12:47
n°934445
darkoli
Le Petit Dinosaure Bleu
Posté le 30-12-2004 à 23:24:03  profilanswer
 

Il n'y a pas de contrôle lorsque tu parcours les tableaux dans tes boucles "do ... while".
 

Code :
  1. do
  2. {
  3. car = fgetc(fp);
  4. tab2[i]=car;
  5. if(car!=',')
  6.   {j++;}
  7. else if(k==0)
  8.   {k++;j++;}
  9. i++;
  10. }while(i==j && car!=EOF);


 
Tu pourrais définir une constante ("MAX_TAILLE_..." ) et l'utiliser à la fois pour définir tes tableaux et ajouter un contrôle dans tes boucles.


Message édité par darkoli le 30-12-2004 à 23:25:28

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html

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

  remise a zero d'un tableau ?

 

Sujets relatifs
créer une barre de défilement dans un tableauscrutation d'un tableau
Pdf Remettre l'entete d'un tableau au saut de page.tableau
Probleme de declaration d'un tableauremplir combobox avec objet rempli avec un tableau rempli avec un TXT.
afficher un fonds aléatoire dans un tableauProblème pour quitter un tableau dynamique d'images
tirage aléatoire sans remisetri d'un tableau d'objet suivant une relation d'ordre
Plus de sujets relatifs à : remise a zero d'un tableau ?


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