Une question sur les suites/chaine de caracteres:)

Une question sur les suites/chaine de caracteres:) - C - Programmation

Marsh Posté le 02-02-2009 à 19:11:14    

Bnjr :)
j'ai un souci qui m'enerve :s on demande de saisir un nombre ( par ex: 4600 ) et afficher qu'il contient Quatre chiffre ( selon le nombre saisi )
 
ex d'execution:
saisir un nombre: 4600
le nombre saisi contient 4 chiffres :s
 
on m'a recommandé d'essayer Getchar mais jarrive pas à resoudre mon souci, l'astuce introuvable qu'il faut lire un chiffre par chiffre et pas un à la fois :s  
 
PS: le programme doit se faire avec les boucles et par Turbo C comme compilateur :)
 
Merci d'avance

Reply

Marsh Posté le 02-02-2009 à 19:11:14   

Reply

Marsh Posté le 02-02-2009 à 19:13:40    

une fois ta chaine dans ton tableau de char, parcours la chaine jusqu'à trouver un caractere 0, le nbre d epas te donne le nbre de chiffre

Reply

Marsh Posté le 02-02-2009 à 19:49:27    

le probleme qu'il faut le faire qu' avec les boucles parce que on a pas encore etudié les tableaux !

Reply

Marsh Posté le 02-02-2009 à 20:06:44    

C'est quoi cet exercice inutile ? :heink:
 
Bon ben tu fais une boucle à base de getchar() et tu comptes le nombres de chiffres entrés au fur et à mesure. [:spamafote]
Pense juste à contrôler que ce qui est saisi est bien un chiffre.


Message édité par Elmoricq le 02-02-2009 à 20:07:06
Reply

Marsh Posté le 05-03-2009 à 18:13:10    

Joel F a écrit :

une fois ta chaine dans ton tableau de char, parcours la chaine jusqu'à trouver un caractere 0, le nbre d epas te donne le nbre de chiffre

ou strlen() ...
 


---------------
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/
Reply

Marsh Posté le 05-03-2009 à 22:47:08    

vu la tête de l'exo, pas sur qu'il y ai droit :E

Reply

Marsh Posté le 06-03-2009 à 09:22:48    

il n'a qu'a la recoder ^^
(oui oui je sais sa fait tres epiteciens...mais j'menfou j'en suis un)
 
allez un vieux strlen avec une boucle ^^
 
int        my_strlen(char *str)
{
        int i;
 
        i = 0;
        while (str[i] != '\0')
        i++;
        return(i);
}

Message cité 1 fois
Message édité par leoz2004 le 06-03-2009 à 09:23:27

---------------
Worldcraze 10loop
Reply

Marsh Posté le 06-03-2009 à 10:28:05    

leoz2004 a écrit :

il n'a qu'a la recoder ^^
(oui oui je sais sa fait tres epiteciens...mais j'menfou j'en suis un)
 
allez un vieux strlen avec une boucle


ce qui donne en codage 'normal' !

Code :
  1. #include <stddef.h>
  2. size_t my_strlen (char const *str)
  3. {
  4.    size_t i = 0;
  5.    while (str[i] != '\0')
  6.    {
  7.       i++;
  8.    }
  9.    return i;
  10. }


---------------
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/
Reply

Marsh Posté le 06-03-2009 à 19:09:40    

Tiens, aujourd'hui, j'ai codé une petite "classe" String définie ainsi:

Code :
  1. typedef struct{
  2.     size_t sz;  // taille du buffer, toujours > len
  3.     size_t len; // longueur de la chaîne ('\0' exclu)
  4.     char *str;
  5. } String;
  6. String * newString(const char *);
  7. void delString(String *);
  8. size_t stringlen(const String *);
  9. size_t stringcpy(String *dst, const String *src);
  10. size_t stringcat(String *dst, const String *src);
  11. String * stringdup(const String *);
  12. int stringcmp(const String *st1, const String *st2);
  13. int stringcmp2(const String *st1, const char *st2);


(implementation is left as an exercise for the reader [:dawa])
(je ne sais pas pourquoi personne ne pense à faire un truc comme ça en C, vu les avantages que ça représente en terme de simplicité et de sécurité)

Message cité 1 fois
Message édité par el muchacho le 12-03-2009 à 22:53:44

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 06-03-2009 à 19:23:11    

el muchacho a écrit :

(je ne sais pas pourquoi personne ne pense à faire un truc comme ça en C, vu les avantages que ça représente en terme de simplicité et de sécurité)


Tu parles de  
 
http://mapage.noos.fr/emdel/clib.htm
Module FSTR ?
 


---------------
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/
Reply

Marsh Posté le 06-03-2009 à 19:23:11   

Reply

Marsh Posté le 06-03-2009 à 19:27:36    

P'tain, pourtant je l'avais regardée à l'instant. :ange:


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 09-03-2009 à 20:29:17    

Emmanuel Delahaye a écrit :


ce qui donne en codage 'normal' !

Code :
  1. #include <stddef.h>
  2. size_t my_strlen (char const *str)
  3. {
  4.    size_t i = 0;
  5.    while (str[i] != '\0')
  6.    {
  7.       i++;
  8.    }
  9.    return i;
  10. }



 
Codage normal...pas a la norme Epitech :p
 :kaola:  :kaola:


---------------
Worldcraze 10loop
Reply

Marsh Posté le 09-03-2009 à 20:39:30    

Il n'y a pas 36 normes pour le C, il n'y en a que deux, et "epitech" n'en fait pas partie.

Reply

Marsh Posté le 09-03-2009 à 20:52:50    

leoz2004 a écrit :


 
Codage normal...pas a la norme Epitech :p
 :kaola:  :kaola:


 
En dehors de l'affectation en même temps que la déclaration et les parenthèse du return, que propose tu de réellement différent ?
 
D'autant plus que de la part d'un epitechien, j'aurais plutôt vu :
 

Code :
  1. size_t my_strlen (char *s)
  2. {
  3.    char *p = s;
  4.    while (*p)
  5.       p++;
  6.    return (p - s);
  7. }


 
je me trompe ?

Reply

Marsh Posté le 11-03-2009 à 00:11:37    

Erf c'est pas super propre de déclarer et d'initialiser une variable en meme temps (du moins c'est ce qu'on nous apprend ^^)

 

pourquoi utiliser size_t a la place d'int ?
Sinon le return avec un calcul a l'interieur c'est source d'erreur ^^

 

@Elmoricq: Disons que sa nous permet de nous repérer plus rapidement entre epitecien.
Pour avoir bossé dans une boite d'un ancien epitecien, je dois dire que c'est super pratique de se retrouvé ;)

Message cité 2 fois
Message édité par leoz2004 le 11-03-2009 à 00:13:50

---------------
Worldcraze 10loop
Reply

Marsh Posté le 11-03-2009 à 01:14:23    

leoz2004 a écrit :

Erf c'est pas super propre de déclarer et d'initialiser une variable en meme temps

C'est tout à fait sain et ça fait partie des Bonnes Pratiques.

Citation :

(du moins c'est ce qu'on nous apprend ^^)

Alors change d'école...

 
Citation :

pourquoi utiliser size_t a la place d'int ?


Parce que c'est un indice croissant.
http://mapage.noos.fr/emdel/notes.htm#size_t

 
Citation :

Sinon le return avec un calcul a l'interieur c'est source d'erreur ^^


Mais c'est quoi ces a priori infondés ? En quoi ce serait une source d'erreur ?

 


Citation :

@Elmoricq: Disons que sa nous permet de nous repérer plus rapidement entre epitecien.
Pour avoir bossé dans une boite d'un ancien epitecien, je dois dire que c'est super pratique de se retrouvé ;)


Bah, il y a les réseaux sociaux pour ça. inutile de massacrer le code...

 


Message édité par Emmanuel Delahaye le 11-03-2009 à 01:14:44

---------------
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/
Reply

Marsh Posté le 11-03-2009 à 08:45:52    

leoz2004 a écrit :

Erf c'est pas super propre de déclarer et d'initialiser une variable en meme temps (du moins c'est ce qu'on nous apprend ^^)


 
Ah.  Et on peut savoir pourquoi?
 

Citation :

pourquoi utiliser size_t a la place d'int ?


 
Quand on propose un remplacement pour quelque chose, on en respecte le prototype.  Depuis 89 (1989), le prototype de strlen c'est
 

Code :
  1. size_t strlen(char const*);


 
size_t parce que c'est le type destine a contenir des tailles.
const parce que la chaine n'est pas modifiee.
 
On ne vous apprend pas ca?
 

Citation :

Sinon le return avec un calcul a l'interieur c'est source d'erreur ^^


 
Ah?
 

Code :
  1. return expression;


 
est donc plus source d'erreur que
 

Code :
  1. var = expression;
  2. return var;


 
On peut savoir pourquoi?

Reply

Marsh Posté le 11-03-2009 à 11:21:12    

Premièrement je viens en paix les gars ^^
Vous avez peut etre sortis les dents parce que je suis a l'epitech (j'ai bien compris qu'on est pas trop aimer ^^)
 
Alors commençons par ce qui ma fait le plus rire ;)
Les reseaux sociaux ne nous permettent pas de comprendre et d'analyser le code plus vite ;) mais elle était sympa ta bague :D
 
Pour size_t merci de l'info, j'avais en fait déjà rencontrer ce genre de  prototypes mais je ne m'y était pas attarder :)
 
Imaginons que l'on doit effectuer dans le return plusieurs opérations d'affiles  
return ((a * b) - (42%2))
Il faut avouer que result = (a * b) - (42%2)
return(result) est moi source d'erreur car plus facilement situable après chacun ses choix :)
 
 
"Erf c'est pas super propre de déclarer et d'initialiser une variable en même temps (du moins c'est ce qu'on nous apprend ^^)" <== Alors je précise que c'est pour les tek1 je crois que les tek2 ont le droit a tout .


---------------
Worldcraze 10loop
Reply

Marsh Posté le 11-03-2009 à 12:13:41    

leoz2004 a écrit :

Premièrement je viens en paix les gars ^^


Et ? On a simplement répondu à tes affirmations étranges. C'est mal ? La plupart des gens qui répondent ici sont des programmeurs chevronnés alors on peut difficilement laisser passer ça.

Citation :


Vous avez peut etre sortis les dents parce que je suis a l'epitech (j'ai bien compris qu'on est pas trop aimer ^^)


Disons que ce n'est pas le première fois que les règles de programmations imposées aux tek1 nous surprennent...
 

Citation :


Alors commençons par ce qui ma fait le plus rire ;)
Les reseaux sociaux ne nous permettent pas de comprendre et d'analyser le code plus vite ;) mais elle était sympa ta bague :D


J'ai peut être mal compris ta phrase :  

Citation :

Disons que sa nous permet de nous repérer plus rapidement entre epitecien.
Pour avoir bossé dans une boite d'un ancien epitecien, je dois dire que c'est super pratique de se retrouvé


Pour ce genre de chose Viadéo est ton ami...
 
 

Citation :

Pour size_t merci de l'info, j'avais en fait déjà rencontrer ce genre de  prototypes mais je ne m'y était pas attarder :)


euh, ce 'genre de prototype' fait parte de la norme qui définit le langage C. Ca aussi, à l'Epitech, on s'assoie dessus ?
 

Citation :

Imaginons que l'on doit effectuer dans le return plusieurs opérations d'affiles  
return ((a * b) - (42%2))
Il faut avouer que result = (a * b) - (42%2)
return(result) est moi source d'erreur car plus facilement situable après chacun ses choix :)


Situable ? Connais pas ce mot. Tu veux dire localisable ? Je ne comprends pas ton argumentation. Tu peux clarifier ?
 

Citation :


"Erf c'est pas super propre de déclarer et d'initialiser une variable en même temps (du moins c'est ce qu'on nous apprend ^^)" <== Alors je précise que c'est pour les tek1 je crois que les tek2 ont le droit a tout .


Et ? Tu en déduis quoi ? Moi, je de vois que de l'incohérence...
 
http://mapage.noos.fr/emdel/goret.htm


---------------
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/
Reply

Marsh Posté le 11-03-2009 à 12:20:44    

Un logiciel code par un epitecien est plus simple pour un autre epitecien a comprendre du fait d'avoir la même norme.
Donc Viadeo n'a rien a voir avec mon argument ^^
 
Maintenant je vois que ce sujet par en troll et n'a aucun interet.
J'ai bien des choses a repondre mais finalement tu/(vous) avez l'air borne.
 
Au revoir et Merci pour tout le poisson.


---------------
Worldcraze 10loop
Reply

Marsh Posté le 11-03-2009 à 12:57:16    

leoz2004 a écrit :

avez peut etre sortis les dents parce que je
suis a l'epitech (j'ai bien compris qu'on est pas trop aimer ^^)


 
Hypothese fausse.  Ce que je n'aime pas c'est l'arrogance, qu'elle vienne
de quelqu'un de l'Epitech ou d'ailleurs, je m'en fous.  Mais j'avoue que
quand il n'y a rien derriere pour la justifier, c'est plus amusant.
 
Tres serieusement, remets-toi en question avant de te poser en martyr de
ton ecole, tu lui fais plus de mal que de bien.
 

Citation :

Pour size_t merci de l'info, j'avais en fait déjà rencontrer ce
genre de prototypes mais je ne m'y était pas attarder :)


 
Ca denote une longue et variee experience.
 

Citation :

Imaginons que l'on doit effectuer dans le return plusieurs opérations d'affiles  
return ((a * b) - (42%2))
Il faut avouer que result = (a * b) - (42%2)
return(result) est moi source d'erreur car plus facilement situable après chacun ses choix :)


 
J'ai du mal a avouer quoi que ce soit d'autre que je ne vois pas la
difference fondamentale.
 

Citation :

"Erf c'est pas super propre de déclarer et d'initialiser une
variable en même temps (du moins c'est ce qu'on nous apprend ^^)" <== Alors
je précise que c'est pour les tek1 je crois que les tek2 ont le droit a
tout .


 
J'ai vu pas mal de conventions exigeant l'initialisation a la declaration,
j'ai meme vu des langages qui l'imposent.  Mais je ne me souviens pas avoir
vu de conventions l'interdisant.
 

leoz2004 a écrit :

Un logiciel code par un epitecien est plus
simple pour un autre epitecien a comprendre du fait d'avoir la même norme.
Donc Viadeo n'a rien a voir avec mon argument ^^


 
J'en deduis donc que  
- les epiteciens ne respectent pas les conventions de l'entreprise, ils
  utilisent les leurs.
- les epiteciens ont du mal a comprendre les programmes ne respectant pas
  leurs conventions.

Reply

Marsh Posté le 11-03-2009 à 17:55:22    

leoz2004 a écrit :

Premièrement je viens en paix les gars ^^
Vous avez peut etre sortis les dents parce que je suis a l'epitech (j'ai bien compris qu'on est pas trop aimer ^^)


 
Ce n'est pas de la critique car tu viens d'Epitech (d'ailleurs j'en suis ...), mais simplement qu'il ne faut pas crier haut et fort des affirmations simplement car tu les a entendu, alors même qu'elle ne sont pas justifiables !
 
 

Citation :

"Erf c'est pas super propre de déclarer et d'initialiser une variable en même temps (du moins c'est ce qu'on nous apprend ^^)" <== Alors je précise que c'est pour les tek1 je crois que les tek2 ont le droit a tout .


 
Raison de plus, si c'est autorisé par la suite c'est bien que c'est totalement correct !
 
D'ailleurs si tu lit le K&R, les calculs dans les return et les déclarations/initialisations sont courantes !
Et remettre en cause le K&R est tout de même assez osé  :jap:


Message édité par Wyruz le 11-03-2009 à 17:57:56
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed