Newbie en C : lecture/test tableau d'entiers

Résolu
zeemzoom -  
 Arlette au Malibu -
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

zeemzoom
 
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 1572 Date d'inscription   Statut Membre Dernière intervention   452
 
Logique. Sérieusement, je vois pas ou est ton problème. C'est normal qu'il reste bloqué... C'est programmé ainsi!
0
zeemzoom
 
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
Andy-fr-07
 
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
zeemzoom
 
Ah okie jvais tester ça : ))

merci !
0
Andy-fr-07 > zeemzoom
 
Au passage Archeus01, merci pour ta valeur ajoutée... ;-P
0
Archeus01 Messages postés 1572 Date d'inscription   Statut Membre Dernière intervention   452 > Andy-fr-07
 
C'était pour dire que ça ne venait pas du compilateur.
0
zeemzoom > Archeus01 Messages postés 1572 Date d'inscription   Statut Membre Dernière intervention  
 
t'inquiète j'ai bu trop de vodka c'est tout : )
0
zeemzoom
 
:-S

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

Merci bcp.
0
Arlette au Malibu
 
C'est pas beau Internet ?
0