Donc tu compiles en C++, ce qui évidemment fausse les résultats.Citation:
Envoyé par seriousme
Je te conseille de renommer ton fichier en .c, ce qui invoquera le compilateur C.
Version imprimable
Donc tu compiles en C++, ce qui évidemment fausse les résultats.Citation:
Envoyé par seriousme
Je te conseille de renommer ton fichier en .c, ce qui invoquera le compilateur C.
Si tu fais référence à la méthode de stoquage des bases de données, généralement il s'agit soit d'un arbre B (le plus utilisé) soit d'un hachage dynamique.Citation:
Algorithmiquement, ça se fait généralement avec un arbre rouge-noir je crois.
Encore une bonne raison de ne pas utiliser scanf lorsqu'on ne le maitrise pas ...Citation:
e &, il en faut un pour les scanf("%d") et il n'en faut pas pour les scanf("%s").
Citation:
Envoyé par jive
Dans un projet informatique les tableaux statiques sont très peu utilisés.
On utilise des structures dynamiques telles que les listes chainées en C.
En C++ il y a les vector, list,deuque etc... de la STL.
Ce que tu veux faire c'est un peu lourd à faire en C pur et dur mieux vaut prendre un SGBD comme MySQL qui permettra de faire des requêtes de tri sur les clients.
On peut parfaitement interfacer MySQL avec programme en C ou tout autre langage
Dans son cas il serait peut-être plus pratique de prendre SQLite.
Ce sera en C parce que c'est la contrainte suprême.
J'avais déjà à l'idée que mon projet serait lourd étant donné mon faible niveau mais ici seul le résultat comptera.
Autrement je rassure je connais bien le printf, mais pour moi cela permet d'afficher keklkechose à l'écran. Le scanf permettrais de mettre ce qui est indiqué par l'uilisteur en mémoire que l'on fera apparaitre si on veut ensuite par un printf.
le & s'applique aussi bien pour %d que pour un %s ou encore un %c ou un %f à ma conaissance. C'est une question de référence à la mémoire.
Code:
1
2
3 int i=0; printf("%d\n", &i);
Avec ceci on affiche l'adresse mémoire où est stocké i.
il faut faire cela
Code:
Avec devc++, je confirme il faut enregistrer avec l'extension c et pas cpp.Code:
1
2 int i=0; printf("%d\n", i);
Moi ce que je veux c'est que lorsque un type entre une valeur, cela s'enregistre dans une cellule d'un 1er tableau (par un scanf donc) et que en même temps ca génére une valeur automatiquement qui s'insérera dans une cellule d'un deuxiéme tableau un peu à la maniére d'une indexation automatque puisque on parle de base de données.
Mais voilà en C y a t'il un moyen d'indiquer cà ?.
Aprés cà, je réfléchirais à la facon de récupérer les index des valeurs qui seraient ne liaison (qui dabs ce cas correspondrait à la valeur inséré par l'utilisateur + la valeur inséré automatiquement).
:)
oui ou tout autre SGBD :wink:Citation:
Envoyé par loufoque
L'usage de scanf() est complexe et déconseillé si on ne maitrise pas...Citation:
Envoyé par jive
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers
... la preuveCitation:
le & s'applique aussi bien pour %d que pour un %s ou encore un %c ou un %f à ma conaissance. C'est une question de référence à la mémoire.
"%s" attend l'adresse d'un char. Le nom d'un tableau de char est exactement ça. L'adresse du premier char du tableau. Donc, pas de &.
Code:
1
2
3
4
5
6 char s[10 + 1]; if (scanf ("%10s", s) == 1) { ...
Non. Comportement indéfini. Ceci est correct :Citation:
Avec ceci on affiche l'adresse mémoire où est stocké i.Code:
1
2
3 int i=0; printf("%d\n", &i);
Code:
1
2
3 int i=0; printf("%p\n", (void *) &i);
Certainement. Il suffit d'écrire le code qui va bien.Citation:
Moi ce que je veux c'est que lorsque un type entre une valeur, cela s'enregistre dans une cellule d'un 1er tableau (par un scanf donc) et que en même temps ca génére une valeur automatiquement qui s'insérera dans une cellule d'un deuxiéme tableau un peu à la maniére d'une indexation automatque puisque on parle de base de données.
Mais voilà en C y a t'il un moyen d'indiquer cà ?.
En fait, je dois être super intelligent ou alors c'est l'heure mais je ne vois pas trop ou tu bloques ?
Comme l'a très bien dis emmanuel, il te suffit d'écrire le code qui correspond à ton problème et le tour est joué ...
En ce que je crois que tu cherches, c'est s'il existe une fonction spécifique qui répondrait à ton problème, dans ce cas, à ma connaissance non, il faut l'écrire.
Ainsi, lorsque tu lis une valeur, ça n'est pas sorcier de la mettre dans un tableau puis ensuite appeler une fonction qui va te créer un index sur ton deuxième tableau.
oui mais voilà je sais faire cà
et là je sais que ca va direct dans mon tableauCode:
1
2 printf("veuillez saisir votre prenom :\n"); scanf("%s", client.prenom);
mais si je veux que ca insérer une valeur sans la taper avant comment ca ce passe ?
je voudrais un truc comme ca
mais sans avoir l'étape printf avant; faire que ca s'insécrémente dans le tableau tout seul.Code:
1
2 printf("veuillez saisir un nombre :\n"); scanf("%d", &client.numero);
Bon j'édite ici, j'ai un début de solution et c'est plutôt con ! mais ca marche pas encore.
et à l'affichage malheureusement mon article.numprdt vaut un chiffre trés long au lieu de valoir juste 1.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95 #include <stdio.h> #include <string.h> int nbclient=0; int nbarticle=0; void saisie(); void affichage(); struct acheteur { char nom[20]; char prenom[20]; int age; }; struct acheteur client, tabclient[100]; struct produit { int numprdt; }; struct produit article, tabarticle[100]; main() { int choix; int num; choix=-1; while (choix!=0) { printf("-1- Veuillez saisir vos données\n"); printf("-2- affichage de vos données\n"); printf("-3- Quitter le programme\n"); printf("choix\n"); scanf("%d", &choix); switch(choix) { case 1 : saisie(); break; case 2 : affichage(); break; case 3 : printf("au revoir\n"); break; default : printf("erreur\n"); } } } void saisie() { struct produit article; int i; int v; int depart=1; i=nbclient; v=nbarticle; while(strcmp(client.nom, "fin")!=0) { printf("veuillez saisir votre nom, (fin pour terminer) :\n"); scanf ("%s", client.nom); if (strcmp (client.nom, "fin")!=0) { article.numprdt=depart; tabclient[i++]=client; tabarticle[v++]=article; } } nbclient=i; nbarticle=v; } void affichage () { struct produit article; int i; for (i=0; i<nbclient; i++) { client=tabclient[i]; printf ("voici ce que on obtient : %s %d\n", client.nom, article.numprdt); } }
Voici ce que me donne la compilation :
Bon ton problème d'affichage vient du fait que tu affiches ta variable locale au lieu de la variable globale (c'est ce qui correspond à cette ligne: "declaration of 'article' shadows a global declaration").Citation:
test.c:8: warning: function declaration isn't a prototype
test.c:9: warning: function declaration isn't a prototype
test.c:25: warning: return type defaults to 'int'
test.c:25: warning: function declaration isn't a prototype
test.c: In function 'main':
test.c:27: warning: unused variable 'num'
test.c: At top level:
test.c:55: warning: function declaration isn't a prototype
test.c: In function 'saisie':
test.c:56: warning: declaration of 'article' shadows a global declaration
test.c:22: warning: shadowed declaration is here
test.c: At top level:
test.c:86: warning: function declaration isn't a prototype
test.c: In function 'affichage':
test.c:87: warning: declaration of 'article' shadows a global declaration
test.c:22: warning: shadowed declaration is here
test.c:93: warning: 'article.numprdt' is used uninitialized in this function
test.c: In function 'main':
test.c:51: warning: control reaches end of non-void function
Je n'ai pas regardé le reste.
effectivement j'ai viré mes
du local et ca marche.Code:struct produit article;
merci.