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);
Version imprimable
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);
Citation:
Envoyé par Dav-D
C'est bien toi qui a écrit ça. Tu ne sais pas ce que tu écris ?Code:
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++;
Citation:
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é.
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:
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.
Oui j'ai oublié de le précisé, j'ai édité le précedent post.
Voici le code :
Code:
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.
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 :faq: 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 .
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...)Citation:
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'.
http://c.developpez.com/cours/#cours-c => Bonne lectureCitation:
Envoyé par Dav-D
et char * ou tu as char var[10] est rien d'autre qu'une * déguisée.
C'est ça, embrouille le un peu plus en confondant tableaux et pointeurs...Citation:
Envoyé par theshark85
ç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.
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_tabCitation:
Envoyé par theshark85
Oui avec un cour, comme le lien que je lui ais fournit.
Mais ça m'étonnerais qu'il lise tout et comprenne tout.
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
Bonjour,
Pourquoi présumer cela ?Citation:
Envoyé par theshark85
C'est ton cas que tu projettes sur autrui ?
Oui, moi aussi, ça m'agace quand on prétend penser à la place des autres...Citation:
Envoyé par thewho
Bzzt ! Pas d'attaque personnelle à 2 balles...Citation:
C'est ton cas que tu projettes sur autrui ?
Inutile et inefficace.