Newbie en C : lecture/test tableau d'entiers

Résolu/Fermé
zeemzoom - 26 avril 2008 à 23:59
 Arlette au Malibu - 27 avril 2008 à 00:20
Bonjour,

je débute en c et j'essais de réaliser un code qui lit des entiers pour les ranger dans un tableau.
J'essais aussi de faire en sorte d'éviter les doublons en le signalant et en forçant la relecture de l'entier.
C'est un code qui remplit un tableau de 6 entiers :

#include <stdio.h>
	
main()
{
	int nb, n, i ;
	int tab[6] ;
	int etat ;
	
	for (i = 0 ; i < 6 ; i++)
		tab[i] = 0 ;
	etat = n = 0 ;
	do 
	{
		nb = 0 ;
		printf("nombre %d : ", n+1) ;
		scanf("%d", &nb) ;
		for (i = 0 ; i < 6 ; i++)
		{
			if (tab[i] == nb) 
			{
				printf("deja present\n") ;
				etat = 1 ;		
			}
		}
		if (etat == 0)	
		{
			tab[n] = nb ;
			n++ ;
		}
	}
	while (n < 6) ;
}


tant que j'entre volontairement 6 entiers différents le programme reste cool.

Des que j'essaie plusieurs fois de rentrer des doublons il bloque sur le nombre. Et pourtant quand je fais CTRL + C pour sortir du programme j'ai bien plusieurs l'instruction qui dit "deja present".

Bref je comprends pas, j'ai réalisé le meme code en ruby sans me prendre la tete et il a marché du premier coup. Quelqu'un peut me dire c'est quoi la subtilité car j'ai essayé plusieurs combinaisons, j'ai meme essayé de compiler sur linux, windows et mas os pour voir par superstition ^^) le résultat est le même -_-

4 réponses

Au cas où juste pour montrer le code en ruby :

tab = Array.new(6) { |e| e = 0 }
i = n = 0
puts("Entrez Six nombre entre 1 et 49")
while i < 6
	etat = false
	puts "entrez nombre (" + (i+1).to_s + ") :"
	n = gets.chomp.to_i
	tab.each do |e| 
		if (n == e) then
			puts("nombre deja choisi")
			puts("recommencez") 
			etat = true
		end
	end
	if (etat == false) then
		tab[i] = n
		i += 1
	end
end
0
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 450
27 avril 2008 à 00:06
Logique. Sérieusement, je vois pas ou est ton problème. C'est normal qu'il reste bloqué... C'est programmé ainsi!
0
Je vois un peu ce que tu veux dire, mais je débute en programmation et je vois pas où j'ai merdé dans le code C ^^
0
Sérieux... Ce serait cool si tu mettais
etat = 0;
à l'intérieur de ta boucle while.

Celui qui pose une question prend le risque de passer pour un imbécile 5 min.
Celui qui ne la pose pas le sera toute sa vie!

Merci de ton courage.

@+
0
Ah okie jvais tester ça : ))

merci !
0
Andy-fr-07 > zeemzoom
27 avril 2008 à 00:12
Au passage Archeus01, merci pour ta valeur ajoutée... ;-P
0
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 450 > Andy-fr-07
27 avril 2008 à 00:16
C'était pour dire que ça ne venait pas du compilateur.
0
zeemzoom > Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022
27 avril 2008 à 00:19
t'inquiète j'ai bu trop de vodka c'est tout : )
0
:-S

Bon ben j'ai passé pour une imbécile 5 mn mais alors vraiment ...

Merci bcp.
0
Arlette au Malibu
27 avril 2008 à 00:20
C'est pas beau Internet ?
0