Tu m'as demandé pourquoi je le trouvais pas assez aléatoire, je t'ais répondu. Donc question naïve, réponse naïve.
Sinon pour la lecture:
Un fgets arrete ça lecture dés qu'il trouve un \n.
fgets(char* buffer,int size ,FILE* fichier);
Tu m'as demandé pourquoi je le trouvais pas assez aléatoire, je t'ais répondu. Donc question naïve, réponse naïve.
Sinon pour la lecture:
Un fgets arrete ça lecture dés qu'il trouve un \n.
fgets(char* buffer,int size ,FILE* fichier);
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
Envoyé par Dav-DC'est bien toi qui a écrit ça. Tu ne sais pas ce que tu écris ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int chaine[30],mot,i; <...> fichier = fopen("dico.txt","r"); // ouverture et lecture du .txt <...> while (i<=mot) { fgets(chaine,30,fichier); i++;
Pas de Wi-Fi à la maison : CPL
Envoyé par Dav-D
Vérifie le type de tes données. Surtout pour le deuxiéme fgets car a vu d'oeil ton code ne compile pas. mot est un int, et fgets prend char*.
Et fait un dessin, tu verras que tu peux faire une boucle plus simple.
et le i<=mot, fera que ton deuxieme gets lira mot+1.
De plus vérifie le retour de fgets, car si tu arrives en fin de fichier, ça va planté.
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
si si, je sais me servir de fgets et je sais quoi mettre, mais dans mon exemple ici, je m'y perd un peu.
En rajoutant cette ligne :
il me sort l'erreur de compilation suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 fgets(mot,30,fichier);
27 * initializing argument 1 of `char* fgets(char*, int, FILE*)'
or ma variable mot est bien en char (je l'ai modifié par rapport à mon message précédent), mon 30 est bien un entier et mon FILE est bien sous le nom de "fichier"
Quesako ?
Donne ton code en entier dans ce cas, et dit que tu l'as modifié car si au fur et à mesure tu changes les types de tes variables, en laissant les noms, on est pas devin.
Et sinon, char* ou char []!!!!! Un peu de reflexion.
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
Oui j'ai oublié de le précisé, j'ai édité le précedent post.
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main(void) { FILE * fichier; char chaine[30],mot; int i; i=0; srand((unsigned) time(NULL)); fichier = fopen("dico.txt","r"); // ouverture et lecture du .txt if(fichier==0) { printf("Erreur ouverture fichier !\n\n"); // verif du fopen system ("pause"); return -1; } else { mot=(rand()*1)%(249643); // tirage aléatoire sur 249643 mots, 1 mot par ligne while (i<=mot) { fgets(chaine,30,fichier); i++; } fgets(mot,30,fichier); printf ("Le mot choisi est : %d\n",mot); fclose(fichier); } system("pause"); return 0; }
Un peu de reflexion, et tu vas trouver pourquoi ton fgets ne peut pas accepter ta variable.
Regarde ce que prend fgets en param, et là déclaration de tes variables.
char* .... char [] !!!!!
Et pourquoi plusieurs variable, pour une même utilisation? genre mot et chaine. Pas tres jolie tout ça.
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
D'après l'erreur de compil, le fgets prend un char*, moi j'ai déclaré :
char mot;
Difference entre char * et char ?
Euh là que dire a par de chercher un bon tuto sur les pointeurs. Et ou d'aller dans la du site, où tu vas trouver je pense un cour sur les chaines de caractéres.
http://c.developpez.com/cours/#cours-c => Bonne lecture
Tu as su déclare chaine[30]? As tu compris ce que tu as fait?
sinon pour faire simple, mais pas tout expliquer.
char est un caractére, tandis que char * est un pointeur de type char .
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
ok, nous n'avons pas encore vu précisément les pointeurs, voila pourquoi je ne comprenais pas ...
sinon pour le fgets précédent je comprend tout a fait, j'en ai vu beaucoup en exercices ...
Merci de ton aide.
Pourquoi un second fgets() ? La dernière lecture contient le mot. Si ce n'est pas le cas, c'est que le test est faux (< vs <= ...) ou que le compteur est mal initialisé (0 vs 1...)Envoyé par Dav-D
Ecrit un algorithme avant de coder. Ca permet de se concentrer sur la logique en ignorant les détails de codage...
Et puis attention à tes identificateurs. Ce que tu appelles 'mot' est en réalité un 'numéro' ou un 'rang'.
Le 'mot', c'est ce qu'il y aura dans la 'chaine' (en réalité, une 'ligne') lorsque tu auras supprimé le '\n'.
Pas de Wi-Fi à la maison : CPL
http://c.developpez.com/cours/#cours-c => Bonne lectureEnvoyé par Dav-D
et char * ou tu as char var[10] est rien d'autre qu'une * déguisée.
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
C'est ça, embrouille le un peu plus en confondant tableaux et pointeurs...Envoyé par theshark85
Pas de Wi-Fi à la maison : CPL
ça peut aider à comprendre au lieu de toujours croire au pére noël.
Car tu lui expliques comment que quand, il envoie une variable char mot[30] dans une fonction qui prend un char* que le compilo ne lui dise rien. Alors que pour un char il va lui dire quelque chose.
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
Ok je vois pourquoi l'erreur de compilation dans l'immediat, je le verrais + en détail en cours je pense.
Merci de cette explication.
http://emmanuel-delahaye.developpez.....htm#param_tabEnvoyé par theshark85
Pas de Wi-Fi à la maison : CPL
Oui avec un cour, comme le lien que je lui ais fournit.
Mais ça m'étonnerais qu'il lise tout et comprenne tout.
Vive le C => Quoique pas sympa pour la mémoire de mon PC.
Seul le chat le savait!!!!
De la rigueur en programmation est maître mot!!!
Salut,
Pour une discussion détaillée des nombres aléatoires en C, voici un document écrit par Jean-Marc Bourguet: http://www.bourguet.org/cpp/random.pdf
Par ailleurs, je ne vois pas où tu veux en venir en disant que la valeur fournie par rand() n'est pas assez aléatoire. Moyennant une initialisation du générateur avec time(NULL), on obtient quelque chose qui convient à la plupart des utilisations. Pour aller plus dans les détails, voir le document ci-dessus, la FAQ http://c.developpez.com/faq/c/?page=..._random_bornes, et Numerical Recipes in C: http://www.nrbook.com/b/bookcpdf.php.
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Bonjour,
Pourquoi présumer cela ?Envoyé par theshark85
C'est ton cas que tu projettes sur autrui ?
Compilation sans erreur ne signifie pas programme sans erreur.
L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.
Oui, moi aussi, ça m'agace quand on prétend penser à la place des autres...Envoyé par thewho
Bzzt ! Pas d'attaque personnelle à 2 balles...C'est ton cas que tu projettes sur autrui ?
Inutile et inefficace.
Pas de Wi-Fi à la maison : CPL
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager