CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Tableau de chaine

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 15:13:19

Salut tout le monde, j'ai un problème

  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
char tabUnit[4];
tabUnit[0] = "mitrailette";
tabUnit[1] = "fusil";
tabUnit[2] = "tank";
tabUnit[3] = "avion";
for(i=0;i<4;i++){
printf("Le nombre de %s : ", tabUnit);
scanf("%d", &tabUnitDef);
printf("\n");

}

system("PAUSE");
return 0;
}
(le code n'est pas complet), le problème est au niveau du tableau, je pense qu'il n’apprécie pas que j'affecte une chaine de caractère comme ça... quelqu'un peut me dire ce qui ne va pas?

poupstm2
poupstm2
Niveau 29
14 avril 2012 à 15:58:17

je ne suis pas sur, mais je pense que le problème viens du fait que tu essaye de mettre dans un tableau (ou vecteur) un string complet (donc une phrase) alors que cet case ne peut contenir qu'une seul lettre.

peut être qu'en fait ça :

  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
char tabUnit0[] = "mitrailette";
char tabUnit1[] = "fusil";
char tabUnit2[] = "tank";
char tabUnit3[] = "avion";

for(i=0;i<4;i++){
printf("Le nombre de %s : ", ); // mettre le tabunit voulut
scanf("%d", &tabUnitDef);
printf("\n");

}

system("PAUSE");
return 0;
}

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 15:59:53

ok donc si je rajoute un numéro derrière, ça devrais aller?

poupstm2
poupstm2
Niveau 29
14 avril 2012 à 16:03:09

non non, ici j'ai rajouté un numéros par pur exemple.

en fait, ici je déclare des chaines, au lieux de déclarer un seul tableau, je déclare plusieurs tableau et chacun contient un mot.

j'espère que j'arrive à me faire comprendre, le mieux à faire pour que tu t'y retrouve c'est de faire :
char mitraillette[] = "mitrailette";
char fusil[] = "fusil";
char tank[] = "tank";
char avion[] = "avion";

ce qui n'aurais aucun sens car tu pourrais remplacer:
printf("Le nombre de %s : ", ); // mettre le tabunit voulut
par
printf(" entrez le nombre de fusil :");

poupstm2
poupstm2
Niveau 29
14 avril 2012 à 16:07:00

peut-être faire un vecteur de structures ?

une structure qui contiendrais:

{
char [XX]
int nombre
}

le char contiendrais le mot voulut (mitraillette, fusil, ...
l'int contiendrais le nombre entré par l'user

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 16:09:48

ouais mais en faite dans le programme, il y a une quarantaine de type de soldats, donc les rentrer tous "a la main" ça va être long... pour ça j'ai voulus faire mon faignant et tout faire avec une boucle pour ^^

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 16:15:30

enfaite je demande 2fois de saisir pour chaque unité (2*40 ) 80 lignes de codes... + 80lignes pour le scanf... 160lignes que je voudrais remplacer^^)

godrik
godrik
Niveau 30
14 avril 2012 à 16:44:49

poupstm2, en general, quand on ne sait pas, on ferme sa gueule. Ca evite de plomber les copains. :)

lvscarf, les chaines de caracteres en langage C sont des tableau de caracteres. Ici, je ne suis pas entierement sur de ce que tu cherche a faire. On dirait que tu cherches juste a stocker des chaines de caractere constantes (qui ne changeront pas durant l'execution de ton programe).
La declaration de tabUnit devrait donc etre un tableau de pointeur:

char* tabUnit[4];
tabUnit[0] = "mitrailette";
tabUnit[1] = "fusil";
tabUnit[2] = "tank";
tabUnit[3] = "avion";

Si tu voulais des chaines qui peuvent changer durant l'execution de ton programme, il faudrait alloue de la memoire dynamiquement.

Si tu n'as pas encore vu les notions de pointeurs et d'allocation dynamique de memoire, continue d'avancer dans ton cours.

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 16:47:28

j'ai vus la notion de pointeur, et il me semblait que c'était quand on voulais retourner 2 valeurs d'une fonction, sinon pour mes chaines de caractères effectivement elles ne changeront pas, j'aimerai bien maitriser cette histoire de tableau de chaine, et en plus ça m'éviterais du code en trop, je vais tester avec le pointeur, je te remercie de ta réponse^^

poupstm2
poupstm2
Niveau 29
14 avril 2012 à 16:48:33

c'est pour ca que je commençait par un "je ne suis pas sur"

en répondant, j'essaye juste d'aider un peu (vu qu'en ce moment le forum est calme) et ça permet d'up le topic.

si par contre il faut avoir son diplôme en poche, être sur à 100% de ce qu'ont dit, effectivement, je ne prendrais plus la peine de lire aucun poste demandant de l'aide :)

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 16:50:08

merci a vous deux pour vos réponses^^
effectivement le pointeur fonctionne (du moins, j'ai pus d'erreurs au niveau du tableau et de la déclaration du contenu)
par contre j'ai une erreur au niveau du scanf oO je vais voir ça d'un peu plus prêt

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 16:52:31

pour le scanf, il s’agissait d'une erreur de saisie au niveau de la variable, nouveau problème, j'ai réussis a compiler et exécuter le petit programme, mais lorsqu'il m'affiche le contenu du tableau, il m'affiche " ê!! "

godrik
godrik
Niveau 30
14 avril 2012 à 17:19:41

lvscarf, repostes ton code.

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 17:32:56
  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char *argv[])
{

int i;
char *tabUnit[4]; //ajout du pointeur
tabUnit[0] = "mitrailette";
tabUnit[1] = "fusil";
tabUnit[2] = "tank";
tabUnit[3] = "avion";
unsigned long long tabUnitDef;//normalement pas besoin d'initialiser puisqu'on va demander a l'utilisateur de saisir la valeur

for(i=0;i<4;i++){
printf("Le nombre de %s : ", tabUnit);// le ê!! s'affiche a cette ligne la enfaite, %s pour afficher une chaine
scanf("%d", &tabUnitDef);
printf("\n");

}
system("PAUSE");
return 0;
}

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 17:33:35

petit oubli, la variable tabUnitDef a bien été déclaré ^^

j3r3mux
j3r3mux
Niveau 10
14 avril 2012 à 21:30:21

Pour ton scanf regarder bien le format de caractère que t'as mis. Et dans le printf tu demande à afficher une suite de chaîne de caractère ça serait plutôt:

printf("Le nombre de %s : ", tabUnit[i]);

Ensuite tu avais beaucoup d'erreur si on regarde le début du programme. Je te conseil de revoir les bases...

j3r3mux
j3r3mux
Niveau 10
14 avril 2012 à 21:39:16

Désolé j'ai oublié pour le scanf:

scanf("%llu",&tabUnitDef);

godrik
godrik
Niveau 30
14 avril 2012 à 21:51:58

Note que ton compilateur devrait t'avertir de ce genre de probleme. C'est un warning dnas ton compilateur. Si il n'a pas emis de warning, regardes comment le configurer pour qu'il affiche plus de warning. Si il l'avait emit, tu devrais vraiment les lire. Il est rare que le compilateur C donne un warning qui ne soit pas une erreur lorsque l'on debutte.

lvscarf
lvscarf
Niveau 6
14 avril 2012 à 21:58:47

je ne pense pas avoir fais d'erreur, a par pour la déclaration du tableau et des chaines de caractères, ainsi que l'affichage du tableau (je maitrise les tableau en php, mais pas encore en C) le reste est bon il me semble

j3r3mux
j3r3mux
Niveau 10
14 avril 2012 à 22:00:31

Ok c'était juste un conseil :) Après si tu maîtrise tant mieux :ok:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment