Aller au menu - Aller au contenu

connaitre le type d'une variable

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne clems4ever # Posté le 30/08/2008 à 11:08:57
Smouik smouik !
Avatar

bonjour tout le monde

après avoir pris connaissance des paramètres variables, je me suis demandé si l'on pouvait connaitre le type de variable que l'on reçoit (et que l'on ne connait pas puisque le nombre et le type de variable n'est pas tout le temps le même).

existe-t-il un fonction pour connaître le type de variable ? si oui, laquelle ?

merci d'avance

clems4ever

Image utilisateur
Longue vie aux Simpson et à SpringField

Actuellement en train de bosser sur mon site : Regarder-TV pour regarder ou télécharger des films et séries !
Aidez votre prochain ! 2 minutes suffisent
 
Hors ligne Octal # Posté le 30/08/2008 à 11:15:15
Look at me
Avatar
Anciens

études : SUPINFO PACA à Marseille

Non. C'est pour cela que des fonctions comme printf utilisent en premier argument une chaîne de format. Selon le code de format transmis, cela nous permet de connaître le type de variable voulu.
 
Hors ligne -ed- # Posté le 30/08/2008 à 11:16:38
C is a sharp tool
Avatar

études : ECE

Citation : clems4ever
après avoir pris connaissance des paramètres variables, je me suis demandé si l'on pouvait connaitre le type de variable que l'on reçoit (et que l'on ne connait pas puisque le nombre et le type de variable n'est pas tout le temps le même).

existe-t-il un fonction pour connaître le type de variable ?

Non et ça ne sert à rien. Dans une fonction variadic, on utilise le paramètre format pour indiquer, entre autres, les types attendus, comme dans printf(), scanf() etc.

Bon ben grillaid, je vais me recoucher...

Édité le 30/08/2008 à 11:17:23 par -ed-
 
Hors ligne clems4ever # Posté le 30/08/2008 à 11:47:26
Smouik smouik !
Avatar

dans printf, on ne sait pas à l'avance si l'on va afficher une chaine, un nombre ou autre .....

Image utilisateur
Longue vie aux Simpson et à SpringField

Actuellement en train de bosser sur mon site : Regarder-TV pour regarder ou télécharger des films et séries !
Aidez votre prochain ! 2 minutes suffisent
 
Hors ligne aiii # Posté le 30/08/2008 à 11:50:30
Avatar

Ben si, ils viennent de te l'expliquer, c'est le code format qui indique le type du Nième argument.
Exemple avec ceci:
Code : C
1
printf("Print %d ; print %s", 5, "test");

Le premier code format indique que le deuxième argument est de type int, et le deuxième code format indique que le 3ème argument est une chaîne.
Édité le 30/08/2008 à 11:53:31 par aiii
 
Hors ligne -ed- # Posté le 30/08/2008 à 13:13:26
C is a sharp tool
Avatar

études : ECE

Citation : clems4ever
dans printf, on ne sait pas à l'avance si l'on va afficher une chaine, un nombre ou autre .....

La chaine de caractères du format contient des informations qui sont interprétées à l'exécution par printf(). Si le programmeur se trompe,
Code : C
1
printf("%s\n", 123);

le comportement est indéfini.

Un compilateur sérieux et bien configuré permet de repérer ce genre de bug.

Je n'arrive pas bien à voir quel est le problème que tu veux résoudre. Avant de trouver des moyens (comment ?) , il faut définir le but (quoi ?).

Que veux tu faire exactement ?

Édité le 30/08/2008 à 13:16:55 par -ed-
 
Hors ligne clems4ever # Posté le 17/09/2008 à 18:19:06
Smouik smouik !
Avatar

oui mais je veux créer une fonction qui comprend printf mais qui va afficher un résultat trop variable que l'on ne peut pas prévoir donc il faudrait prévoir à l'avance le format

Image utilisateur
Longue vie aux Simpson et à SpringField

Actuellement en train de bosser sur mon site : Regarder-TV pour regarder ou télécharger des films et séries !
Aidez votre prochain ! 2 minutes suffisent
 
Hors ligne Fvirtman # Posté le 17/09/2008 à 18:21:27
Avatar

Hors ligne -ed- # Posté le 17/09/2008 à 18:33:27
C is a sharp tool
Avatar

études : ECE

Citation : clems4ever
oui mais je veux créer une fonction qui comprend printf mais qui va afficher un résultat trop variable que l'on ne peut pas prévoir donc il faudrait prévoir à l'avance le format

J'ai rien compris. Essaye d'être un peu plus concret... Si c'est pas clair dans ta tête, normal que tu n'y arrives pas.
Édité le 17/09/2008 à 18:33:42 par -ed-
 
Hors ligne Ephilion # Posté le 17/09/2008 à 18:42:30
printf ("hello world");
Avatar

Je crois savoir ce qu'il veut
par exemple :
Code : Console
ENTRER UN TRUC
lol
VOUS AVEZ ENTREZ lol


Et tu ne sais pa si l'utilisateur va entrer du texte, ou un nombre. C'est ça ?
Si tel est le cas, tu devras attendre de faire du C++, désolé.

Vous voulez apprendre MS-DOS ? Ou réviser votre C ?
N'hésitez pas à aller sur mon site ! : http://ephilion-tuto.e-monsite.com/

Dernier article : le binaire (comptez en binaire !)
 
Hors ligne -ed- # Posté le 17/09/2008 à 19:50:45
C is a sharp tool
Avatar

études : ECE

Citation : Ephilion
Je crois savoir ce qu'il veut
par exemple :
Code : Console
ENTRER UN TRUC
lol
VOUS AVEZ ENTREZ lol


Et tu ne sais pa si l'utilisateur va entrer du texte, ou un nombre. C'est ça ?
Si tel est le cas, tu devras attendre de faire du C++, désolé.

Je ne vois pas le rapport. Ce qui qualifie la saisie , c'est le type de la variable, c'est pas la magie noire...

Quelque soit le langage, on peut toujours faire une saisie texte (en C, fgets()). Après, si on a défini des critères fiables, on peut en faire une chaine ou un nombre voire une donnée structurée (date, heure, adresse...). Mais il n'y a pas d'heuristique magique qui va lire dans la pensée de celui qui a frappé les touches. L'informatique, c'est déterministe ou alors c'est le chaos...


 
Hors ligne Ephilion # Posté le 18/09/2008 à 20:34:04
printf ("hello world");
Avatar

Oui, j'avoue sur ce coup je me suis trompé. Mon code d'exemple est impossible en C/C++ mais possible avec un langage de haut niveau comme le langage Ruby car il n'y a plus de format pour les variables. En ruby, une variable peut supporter sans broncher du texte ou un nombre.

clems4ever, tu peux tenter d'apprendre le ruby pour faire ton programme sur ce site :
http://rpgcreative.net/programmation/ruby.html

et sur ce tuto du site du zéro (plus accessible)
http://www.siteduzero.com/tutoriel-3-1 [...] -en-ruby.html

Bonne chance !

Vous voulez apprendre MS-DOS ? Ou réviser votre C ?
N'hésitez pas à aller sur mon site ! : http://ephilion-tuto.e-monsite.com/

Dernier article : le binaire (comptez en binaire !)
 
Hors ligne -ed- # Posté le 19/09/2008 à 00:21:22
C is a sharp tool
Avatar

études : ECE

Citation : Ephilion
Oui, j'avoue sur ce coup je me suis trompé. Mon code d'exemple est impossible en C/C++ mais possible avec un langage de haut niveau comme le langage Ruby car il n'y a plus de format pour les variables. En ruby, une variable peut supporter sans broncher du texte ou un nombre.

En ruby, le type est dynamique. Une variable est définie et type lors de sa première initialisation. Après le typage est fort

Code : Ruby
1
2
a = 1   # OK
a = 'c' # erreur


Code : Ruby
1
2
a = 'c' # OK
a = 1   # erreur

Édité le 19/09/2008 à 00:24:18 par -ed-
 
Hors ligne Ephilion # Posté le 19/09/2008 à 07:31:00
printf ("hello world");
Avatar

Ah bon ??!! Désolé, en fait je n'avais jamais essayé, mais je crois qu'il existe des méthodes de conversion, non ?

Vous voulez apprendre MS-DOS ? Ou réviser votre C ?
N'hésitez pas à aller sur mon site ! : http://ephilion-tuto.e-monsite.com/

Dernier article : le binaire (comptez en binaire !)
 
Hors ligne Dakeyras Khan # Posté le 19/09/2008 à 07:37:23
Scientia Potestas Est !

ben ... c'est pas très difficile à réaliser ton exemple Ephilion hein ...
tu récupère une chaîne, et puis tu affiches une chaîne ... quelque soit l'entrée, ça marche :)

"Okay, there's bad code and then there's evil code, and the difference is pretty much whether or not the code wears a stylish cape and has a secret lair." - Chalain

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why. " - Anon

"It is practically impossible to teach good programming style to students that have had prior exposure to Basic; as potential programmers they are mentally mutilated beyond hope of regeneration. " - Edsger Dijkstra
 
Hors ligne clems4ever # Posté le 19/09/2008 à 16:54:33
Smouik smouik !
Avatar

oui mais j'aimerais stocker la chaine surt une variable chiffre si s'en est un

Image utilisateur
Longue vie aux Simpson et à SpringField

Actuellement en train de bosser sur mon site : Regarder-TV pour regarder ou télécharger des films et séries !
Aidez votre prochain ! 2 minutes suffisent
 
Hors ligne Octal # Posté le 19/09/2008 à 17:03:00
Look at me
Avatar
Anciens

études : SUPINFO PACA à Marseille

Citation : clems4ever
oui mais j'aimerais stocker la chaine surt une variable chiffre si s'en est un


Ta demande est toujours floue, on a du mal à comprendre. Tu pourrais un peu expliquer de manière détaillée ce que tu souhaites faire ?
 
Hors ligne Dakeyras Khan # Posté le 20/09/2008 à 08:43:32
Scientia Potestas Est !

en effet on comprends rien, tu obtiendrais quoi pour la chaine :

Bonjour 42, 10^45 Au revoir.

?

"Okay, there's bad code and then there's evil code, and the difference is pretty much whether or not the code wears a stylish cape and has a secret lair." - Chalain

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why. " - Anon

"It is practically impossible to teach good programming style to students that have had prior exposure to Basic; as potential programmers they are mentally mutilated beyond hope of regeneration. " - Edsger Dijkstra
 
Hors ligne alexises # Posté le 20/09/2008 à 09:00:40
merci m@téo pour la v3
Avatar

ok :) je vais t'aider donc
malgré ce que tout le monde dit c'est possible
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // pour utiliser isdigit
int main(void)
{
        char tableau[50]
        int nombre = -1;
        int i = 0;
        scanf("%s", tableau);
        for (i = 0; i != 50; i++)
        {
                 if(isdigit(tableau[i])
                 {
                         nombre *= 10; //pour permettre de récupérer un nombre plus grand que 10
                         nombre += tableau[i] - 48; //le code ascii est stocker comme un nombre sachent que 0 a la valeur 48 il suffit de le retirer et les autres suivents sont bon
                 }
                 else
                 {
                        break;
                 }
        }
}

tu peut améliorer le code pour prendre les nombres négatifs je te laisse chercher
le code a quand même une limite : le nombre doit étre situer en début de chaine
Édité le 20/09/2008 à 09:01:54 par alexises

Image utilisateur
 
Hors ligne clems4ever # Posté le 24/09/2008 à 16:19:27
Smouik smouik !
Avatar

ok merci

Image utilisateur
Longue vie aux Simpson et à SpringField

Actuellement en train de bosser sur mon site : Regarder-TV pour regarder ou télécharger des films et séries !
Aidez votre prochain ! 2 minutes suffisent
 
Hors ligne tc # Posté le 24/09/2008 à 16:34:52
Readability counts
Avatar

études : EPFL

Citation : alexises
ok :) je vais t'aider donc
malgré ce que tout le monde dit c'est possible
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // pour utiliser isdigit
int main(void)
{
        char tableau[50]
        int nombre = -1;
        int i = 0;
        scanf("%s", tableau);
        for (i = 0; i != 50; i++)
        {
                 if(isdigit(tableau[i])
                 {
                         nombre *= 10; //pour permettre de récupérer un nombre plus grand que 10
                         nombre += tableau[i] - 48; //le code ascii est stocker comme un nombre sachent que 0 a la valeur 48 il suffit de le retirer et les autres suivents sont bon
                 }
                 else
                 {
                        break;
                 }
        }
}

tu peut améliorer le code pour prendre les nombres négatifs je te laisse chercher
le code a quand même une limite : le nombre doit étre situer en début de chaine


C'est pas un scoop, -ed- l'a déjà mentionné plus haut. Il est possible de saisir une chaine (pour cela, utiliser scanf() comme tu le fais n'est pas adapté) et d'analyser ensuite son contenu sur la base d'heuristiques permettant de décider du type de l'information entrée par l'utilisateur. Le défis est de parvenir à définir des heuristiques robustes.

Thierry

"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

| FAQ-Python | FAQ-C - FAQ-c.l.c | FAQ-C++ - FAQ-Lite |
 

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx