Créer un tableau en C (très simple mais pas pour moi...)

Créer un tableau en C (très simple mais pas pour moi...) - C - Programmation

Marsh Posté le 15-11-2007 à 16:50:55    

Bonjour!
je voudrai créer un tableau tout bête, une ligne et 2 colonnes, l'utilisateur doit choisir les valeurs qu'il met dans les cases. Ces valeurs doivent ensuite être affichées.
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main(int argc, char *argv[])
  5. {
  6.     int tab[2], i;
  7.     tab[i] = 0;
  8.     printf("entrez le 1er nombre" );
  9.     scanf("%d",&tab[0]);
  10.    
  11.     printf("entrez le 2nd nombre" );
  12.     scanf("%d",&tab[1]);
  13.    
  14.      for (i = 0 ; i < 2 ; i++)
  15.     {
  16.      printf("%d", tab[i]);
  17.     }
  18. system("pause" );
  19.     return 0;
  20. }


je comprends pas ou j'ai faux, ou qu'est ce que je dois faire / changer.
merci d'avance. :)


Message édité par rarerealities le 15-11-2007 à 18:03:00
Reply

Marsh Posté le 15-11-2007 à 16:50:55   

Reply

Marsh Posté le 15-11-2007 à 17:25:23    

Tu saisis dans a et b... et tu affiches tab[i]. Comment veux tu que ça affiche les valeurs que t'as saisies ?


Message édité par mcyrb le 15-11-2007 à 17:26:08
Reply

Marsh Posté le 15-11-2007 à 17:35:27    

bin que ça s'affiche sur une ligne a la suite, j'affiche bien tab[i] lorsque je fais "printf("%ld", tab[i]);" non?

Reply

Marsh Posté le 15-11-2007 à 17:40:46    

Certes, mais tu ne saisis pas tes valeurs dans tab[i]. Alors au lieu de saisir dans a et b pourquoi ne pas directement les saisir dans tab[0] et tab[1], genre : scanf("%d",&tab[0]);
 
Edit: les disclaimeurs habituelles : scanf est dangeureux pour votre santéprogramme, à consommer avec modération.


Message édité par tpierron le 15-11-2007 à 17:43:21
Reply

Marsh Posté le 15-11-2007 à 17:53:57    

merci j'y suis arrivé, je ne pensais pas qu'on pouvait utiliser cette syntaxe plus simple :) j'ai édité mon 1er post avec la solution.

Reply

Marsh Posté le 15-11-2007 à 18:07:37    

Code :
  1. int tab[2], i;
  2. tab[i] = 0;
 

Quelle est la valeur de i ? et quelle est donc cette case de tab que tu mets à 0 ?


Message édité par mcyrb le 15-11-2007 à 18:13:08
Reply

Marsh Posté le 15-11-2007 à 18:29:14    

i=0, je le dis dans "for (i = 0 ; i < 2 ; i++)"
et je dois "initialiser mon tableau" non? (ou pas la peine?)

Reply

Marsh Posté le 15-11-2007 à 18:45:11    

A la ligne 7 je vois tab[i] = 0 !!!
 
Alors que tu n'as jamais initialisé AVANT la variable i.
 
il est plus clair d'écrire
 

Code :
  1. int tab[2];
  2. int i = 0;


 
d'ailleur a quoi sert ton tab[i] = 0 ?

Reply

Marsh Posté le 15-11-2007 à 18:54:10    

je pensais que je pouvais initialiser le tableau et la variable i d'un coup en ecrivant tab[i] = 0 :D merci du conseil

Reply

Marsh Posté le 15-11-2007 à 19:00:52    

Tu peux toujours écrire tab[i=0] = 0 si ça t'amuse.

Reply

Marsh Posté le 15-11-2007 à 19:00:52   

Reply

Marsh Posté le 15-11-2007 à 20:27:39    

rarerealities a écrit :

je pensais que je pouvais initialiser le tableau et la variable i d'un coup en ecrivant tab[i] = 0 :D merci du conseil


 
int tab[2];
 
veut dire que tu as initialisé un tableau à deux entiers.
 
ensuite pour initialiser chaque element t'es obligé d'écrire
 
for(int i=0; i<2; ++i) tab[i] = 0;
 
Dans ton cas cette ligne est inutile puisque tu initialises manuellement chaque element avec ton scanf  ;)  
 
Autrement même si par convention toutes nouvelles variables entières sont intialisées à 0, Je te conseille vivement d'écrire explicitement chaque initialisation et de mettre qu'une seule instruction par ligne.
 
Comme tu débutes ceci t'éviteras des problèmes de compressions inutiles.
 
Et à bientôt ... sur l'allocation dynamique  :hello:

Reply

Marsh Posté le 15-11-2007 à 21:01:23    

heu c'est pas for(int i=0; i<2; ++i) int tab[i] = 0;  
je ne suis pas sur de bien comprendre la différence avec ce que j'avais fait (tab[i] = 0; au début du code) :??:
 
en tout cas merki pour les tuyaux

Reply

Marsh Posté le 15-11-2007 à 21:30:41    

rarerealities a écrit :

heu c'est pas for(int i=0; i<2; ++i) int tab[i] = 0;  
je ne suis pas sur de bien comprendre la différence avec ce que j'avais fait (tab[i] = 0; au début du code) :??:
 
en tout cas merki pour les tuyaux


Simplifie toi la vie. Il y a seulement 2 étapes:  
 
1) tu crées tes variables  
2) tu leurs donnes une valeur
 
1) tu crées tes variables  
 

Code :
  1. int i; //tu crées la variable i
  2. int tab[2]; //tu crées le tableau tab avec 2 cases


 
2) tu leurs donnes une valeur
 

Code :
  1. scanf("%d",&tab[0]); //tu donnes la valeur saisie par l'utilisateur à la 1ère case
  2. scanf("%d",&tab[1]); //tu donnes la valeur saisie par l'utilisateur à la 2ème case


 
Voilà c'est tout ne te complique pas la vie. Bien sûr il te faut rajouter les printf mais rien de plus. Ensuite une fois que tu as bien compris ça tu peux faire une boucle.
 
La boucle te permettra de donner à i les valeurs 0 et 1:
 

Code :
  1. for(i=0;i<2;i++) scanf("%d",&tab[i]); //i prendra la valeur 0, puis 1


 
En passant scanf est déconseillé, mais pour des débutants comme nous je ne vois pas quel est le problème.
 
Attention: quand tu as écrit:
 

Code :
  1. int i; // tu as crée la variable i
  2. int tab[2]; // tu as crée le tableau tab
  3. tab[i]=0; //tu as donné la valeur 0 à la case numéro i du tableau


 
Or tu n'as pas donné de valeur à i. Dans ce cas tu as donné la valeur 0 à une cas au pif, surement en dehors du tableau (même si tu n'as pas donné de valeur à i il se trouve qu'il en a une, et pas une petite ex: 31456 [:pingouino]
 
Une proposition:
 

Code :
  1. #include <stdio.h>
  2. int main(int argc, char *argv[])
  3. {
  4.     int i,tab[2];
  5.    
  6.    for (i = 0 ; i < 2 ; i++)
  7.    {
  8.        printf("\nEntrez le nombre n°%d: ",i);
  9.        scanf("%d",&tab[i]);
  10.    }
  11.  
  12.    for (i = 0 ; i < 2 ; i++)
  13.    {
  14.        printf("\nNombre n°%d: %d",i,tab[i]);
  15.    }
  16.     return 0;
  17. }

Message cité 1 fois
Message édité par ngkreator le 15-11-2007 à 21:40:47
Reply

Marsh Posté le 16-11-2007 à 10:57:24    

ngkreator a écrit :

En passant scanf est déconseillé, mais pour des débutants comme nous je ne vois pas quel est le problème.


 
Fais un programme de dix lignes qui lit un entier avec scanf, puis exécute-le, et lorsque le programme le demande, entre "oui-oui et sa voiture rouge et jaune".
 
Enjoy. [:dawa]
 
Utiliser fgets() c'est plus facile que d'utiliser scanf(), et ensuite ça permet d'étudier les conversions (strtol, strtod, etc), bien plus propre et au passage bien plus formateur, donc mieux pour un débutant. [:klem3i1]

Reply

Marsh Posté le 16-11-2007 à 12:06:40    

Elmoricq a écrit :


 
Fais un programme de dix lignes qui lit un entier avec scanf, puis exécute-le, et lorsque le programme le demande, entre "oui-oui et sa voiture rouge et jaune".
 
Enjoy. [:dawa]
 
Utiliser fgets() c'est plus facile que d'utiliser scanf(), et ensuite ça permet d'étudier les conversions (strtol, strtod, etc), bien plus propre et au passage bien plus formateur, donc mieux pour un débutant. [:klem3i1]


Mais un débutant, qui fait ses premiers programmes, il ne va pas les distribuer. Il sera le seul utilisateur. Il sait ce qu'il doit entrer comme type de valeurs.  
 
Je suis d'accord qu'il faut sécuriser tout ça le plus tôt possible pour prendre de bonnes habitudes, mais pour un 1er au 2nd programme je trouve ça pas indispensable.
 
Bien que en fait c'est vrai que c'est pas plus compliqué, après réflexion. Pourquoi pas. [:petrus75]


Message édité par ngkreator le 16-11-2007 à 12:11:50
Reply

Marsh Posté le 16-11-2007 à 12:27:46    

merci a tous d'eclairer ma lanterne :D

Reply

Marsh Posté le 10-11-2013 à 14:36:03    

merci

Reply

Sujets relatifs:

Leave a Replay

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