Pourquoi la fonction demander_nombre se charge-t-elle d’allouer un tableau, son rôle devrait être de demander un nombre et c’est tout (on pourrait rajouter vérifier qu’il est bien positif, mais même ça je trouve que c’est de trop). Fais toi une fonction qui alloue le tableau et une qui le remplit, et fais ta fonction demander_nombre faire ce que son nom dit qu’elle fait.
Alors je n'ai honnêtement rien lu, mais pourquoi veux-tu passer l'adresse de i ? Tu ne cherches pas à le modifier dans test, et de toute manière test ne prend pas un pointeur, donc tu ne peux pas lui envoyer d'adresse.
Imaginons que tableau[4] vaille {1,3,5,7}, et que valeur_recherche vaille 6. Que va-t-il se passer ? Dans test, la comparaison *vr (et tu es casse-bonbon avec tes pointeurs qui ne servent à rien) avec tableau[0] va donner quoi, à ton avis ?
De même, si valeur_recherche vaut 3 ? Reponse ?
- Edité par edgarjacobs 16 janvier 2018 à 21:54:20
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Ce serait quand même cool de lire les réponses que les gens prennent le temps de poster, et de les prendre en compte (en particulier au niveau de ton utilisation des pointeurs). Voici une des manières dont je vois ton truc.
int main(void)
{
int taille = saisir_entier("Combien de chiffre voulez vous dans ce tableau ?\n");
int *tableau = allouer(10 * sizeof(int));
if(NULL == tableau)
return -1;
remplir_tableau(tableau, taille);
int valeur = saisir_entier("Quelle valeur voulez-vous chercher ?\n");
if(chercher(valeur, tableau, taille))
printf("OK\n");
else
printf("KO");
return 0;
}
Concernant la fonction (et non le programme) d’allocation, cela ne va pas donner de difficultés supplémentaires, mais au contraire simplifier les choses.
Le programme sera plus simple à lire.
Tu pourras tester chaque fonction plus facilement, parce qu’elle ne feront qu’une seule chose à la fois.
Comme tes fonctions ne font qu’une seule chose, c’est plus facile de trouver dans laquelle il y a une erreur et donc de la corriger.
Avant de coder, réfléchis à comment tu rechercherais une valeur dans un tableau (avec un papier et un crayon si nécessaire, et généralement, ben ça l’est). Peux-tu savoir qu’elle n’y est pas avant d’avoir tout parcouru ? Je pense que tu es d’accord avec moi que non, et pourtant, c’est ce que ton code fait ; à chaque tour de boucle, si la valeur n’est pas bonne tu renvoie faux.
PS : les booléens existent dans la bibliothèque standard (regarde stdbool.h).
PS 2 : non, utiliser un pointeur pour utiliser une valeur dans d’autres programmes ne te simplifient pas la vie, passe la valeur de ta variable directement, et son adresse, si la fonction va modifier cette valeur. Et si la fonction peut retourner une valeur, c’est encore mieux, pas besoin de pointeurs. Non, ce n’est pas que ça heurte notre sensibilité, c’est qu’on sait que ça rend le code plus difficile à lire, donc ça rend les erreurs plus faciles à écrire et plus difficile à trouver. Après si tu veux faire la course en reculons à cloche-pied alors que tu peux la faire en courant normalement...
C'est très compliqué par rapport à ce que tu as besoin, et le code contient deux warnings dont une bombe à retardement :
$ gcc -Wall -Wextra main.c
main.c: In function ‘main’:
main.c:60:9: warning: unused variable ‘i’ [-Wunused-variable]
int i;
^
main.c: In function ‘test’:
main.c:54:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
Et tes fonctions exécutent toutes plus qu'une tâche, ce qui contredit le principe qui dit qu'une fonction ne doit réaliser qu'une tâche bien définie. Par exemple, si demain on veut que la valeur à chercher soit récupérée dans un fichier, on doit modifier la fonction de recherche, ce qui n'a pas de sens.
Je parie ma selle et mes bottes que tu ne l'as pas essayé.... sinon tu aurais constaté qu'il fonctionne (et je ne suis pas le seul à le dire, merci à Ksass`Peuk et à Ertyw)
- Edité par edgarjacobs 17 janvier 2018 à 21:12:55
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Non, non il a raison, ton code ne marche pas. Il manque une fonction main correcte et tout... Non mais franchement, quel amateur à mettre un code sans main ! Quoi ? En fait il voulait juste donner la fonction correcte, il ne voulait pas cracher un code tout cuit ! Ah, ceci explique cela. Nous avons levé la part d’ombre sur ce mystère. Mais le mystère principal, lui reste toujours entier : pourquoi ne pas suivre les conseils des différents intervenants ?
@edgarjacobs : ça y est, tu as sûrement perdu ta selle et tes bottes, tu n’est plus un cow-boy...
Non, non il a raison, ton code ne marche pas. Il manque une fonction main correcte et tout... Non mais franchement, quel amateur à mettre un code sans main ! Quoi ? En fait il voulait juste donner la fonction correcte, il ne voulait pas cracher un code tout cuit ! Ah, ceci explique cela. Nous avons levé la part d’ombre sur ce mystère. Mais le mystère principal, lui reste toujours entier : pourquoi ne pas suivre les conseils des différents intervenants ?
@edgarjacobs : ça y est, tu as sûrement perdu ta selle et tes bottes, tu n’est plus un cow-boy...
- Edité par edgarjacobs 18 janvier 2018 à 13:50:21
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent