RENITIALISER EN LANGAGE C
lucas01
Messages postés
1835
Date d'inscription
Statut
Membre
Dernière intervention
-
lucas01 Messages postés 1835 Date d'inscription Statut Membre Dernière intervention -
lucas01 Messages postés 1835 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'avais déjà poser un poste, mais je me souvient plus trop. Enfin, je débute en c et je veut faire un jeu, ce jeu est un pendu. Mais avec la commande random, il choisi toujours le même nombre (ou mot). On ma dit de signaler #includ time... Je sais plus. Bon voici mon code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char tab[10][15];
char buf[15];
int main(int argc, char *argv[])
{
int nb, res, r=0, i;
srand(time(NULL));
res= rempli_tab();
nb= nombre_hasard();
res= affiche_mot(tab[nb]);
for(i=0; i<20; i++)
{
res=saisie_car();
if(res==10) continue;
r=comp_car(res, tab[nb]);
if(r==0) {
printf("penalite= %d\n", r);
}
else {
printf("buf = %s\n",buf);
if(strcmp(buf, tab[nb])==0) {
printf("Vous avez GAGNE !!!!\n");
break;
}
}
}
system("PAUSE");
return 0;
}
int rempli_tab()
{
sprintf(tab[0],"%s","clavier");
sprintf(tab[1],"%s","maison");
sprintf(tab[2],"%s","voiture");
sprintf(tab[3],"%s","pelouse");
sprintf(tab[4],"%s","rateau");
sprintf(tab[5],"%s","souvenir");
sprintf(tab[6],"%s","souris");
return(0);
}
int nombre_hasard()
{
int nb;
//srand((unsigned int)time(NULL));
nb=rand();
return nb;
}
int affiche_mot( mot)
char * mot;
{
int b;
buf[0]= mot[0];
for(b=1;b<strlen(mot);b++)
{
buf[b]='-';
}
buf[strlen(mot)-1]=mot[strlen(mot)-1];
printf("buf = %s\n",buf);
return(0);
}
int saisie_car()
{
char c;
c=getchar();
return(c);
}
int comp_car( c, mot)
char c;
char *mot;
{
int b, trouve=0;
for(b=1;b<strlen(mot);b++)
{
if(c==buf[b]){
printf("Cette lettre est DEJA DIT\n");
break;
}
if(mot[b]==c) { buf[b]=c; trouve=1; }
}
return(trouve);
}
Merci pour votre aide.
j'avais déjà poser un poste, mais je me souvient plus trop. Enfin, je débute en c et je veut faire un jeu, ce jeu est un pendu. Mais avec la commande random, il choisi toujours le même nombre (ou mot). On ma dit de signaler #includ time... Je sais plus. Bon voici mon code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char tab[10][15];
char buf[15];
int main(int argc, char *argv[])
{
int nb, res, r=0, i;
srand(time(NULL));
res= rempli_tab();
nb= nombre_hasard();
res= affiche_mot(tab[nb]);
for(i=0; i<20; i++)
{
res=saisie_car();
if(res==10) continue;
r=comp_car(res, tab[nb]);
if(r==0) {
printf("penalite= %d\n", r);
}
else {
printf("buf = %s\n",buf);
if(strcmp(buf, tab[nb])==0) {
printf("Vous avez GAGNE !!!!\n");
break;
}
}
}
system("PAUSE");
return 0;
}
int rempli_tab()
{
sprintf(tab[0],"%s","clavier");
sprintf(tab[1],"%s","maison");
sprintf(tab[2],"%s","voiture");
sprintf(tab[3],"%s","pelouse");
sprintf(tab[4],"%s","rateau");
sprintf(tab[5],"%s","souvenir");
sprintf(tab[6],"%s","souris");
return(0);
}
int nombre_hasard()
{
int nb;
//srand((unsigned int)time(NULL));
nb=rand();
return nb;
}
int affiche_mot( mot)
char * mot;
{
int b;
buf[0]= mot[0];
for(b=1;b<strlen(mot);b++)
{
buf[b]='-';
}
buf[strlen(mot)-1]=mot[strlen(mot)-1];
printf("buf = %s\n",buf);
return(0);
}
int saisie_car()
{
char c;
c=getchar();
return(c);
}
int comp_car( c, mot)
char c;
char *mot;
{
int b, trouve=0;
for(b=1;b<strlen(mot);b++)
{
if(c==buf[b]){
printf("Cette lettre est DEJA DIT\n");
break;
}
if(mot[b]==c) { buf[b]=c; trouve=1; }
}
return(trouve);
}
Merci pour votre aide.
A voir également:
- RENITIALISER EN LANGAGE C
- Langage ascii - Guide
- Renitialiser un pc - Guide
- Langage binaire - Guide
- Comment renitialiser un iphone - Guide
- Pascal langage - Télécharger - Édition & Programmation
13 réponses
Bonjour,
Je veux bien t'aider, mais quelle est ta question au juste ? As-tu testé avec srand ?
Un conseil au passage pour ton hasard, si tu veux que la fonction "nombre_hasard" te renvoie un nombre en 0 et 6, il faut que tu mettes srand % 7.
J'attends ta question...
Yakari
Je veux bien t'aider, mais quelle est ta question au juste ? As-tu testé avec srand ?
Un conseil au passage pour ton hasard, si tu veux que la fonction "nombre_hasard" te renvoie un nombre en 0 et 6, il faut que tu mettes srand % 7.
J'attends ta question...
Yakari
le debogage donne ce resultat :
Program received signal SIGSEGV, Segmentation fault.
0x08048787 in affiche_mot (mot=0xe9d795ff <Address 0xe9d795ff out of bounds>)
at U.c:67
67 buf[0]= mot[0];
Program received signal SIGSEGV, Segmentation fault.
0x08048787 in affiche_mot (mot=0xe9d795ff <Address 0xe9d795ff out of bounds>)
at U.c:67
67 buf[0]= mot[0];
Salut,
N'oublie pas de déclarer les prototypes des fonctions avant le main.
Sinon l'erreur vient du rand().
rand() te renvoie une valeur pseudo-aléatoire entre 0 et RAND_MAX. Il faut donc normer cette valeur pour obtenir une valeur dans l'intervalle que tu veux. Le mieux est d'utiliser les multiplications et les divisions. Mais pour tester, tu peux essayer avec un simple modulo 7. (%7).
Cdlt
N'oublie pas de déclarer les prototypes des fonctions avant le main.
Sinon l'erreur vient du rand().
rand() te renvoie une valeur pseudo-aléatoire entre 0 et RAND_MAX. Il faut donc normer cette valeur pour obtenir une valeur dans l'intervalle que tu veux. Le mieux est d'utiliser les multiplications et les divisions. Mais pour tester, tu peux essayer avec un simple modulo 7. (%7).
Cdlt
Je vous remercie, mais je débute juste. Mon père (ancien programmeur) m'a fait ce codage. Enfin il ma donné les bases. Et il m'a dit en gros débrouille toi. Quand tu auras fini le programme, je peut te montrer autre chose.
Mais le problème c'est que je bloque je sais plus quoi faire. Si vous pouviez me montrer ou carrément me le faire, ce serait cool. :p :p.
@ Yakari
Je te remercie bien vouloir m'aider. Avec srand oui j'ai essayer.
@Tous, apparemment le truc marche mais sa beug, quand j'exécute et tout,
il m'affiche: buf=----------------------------------------------------------------------------------------------------------------[...]
sur 7.8 ligne de la console.
et quand je ferme et RE- exécute le programme il affiche: buf= [rien].
>>> tout le temps
Merci de m'aider.
Mais le problème c'est que je bloque je sais plus quoi faire. Si vous pouviez me montrer ou carrément me le faire, ce serait cool. :p :p.
@ Yakari
Je te remercie bien vouloir m'aider. Avec srand oui j'ai essayer.
@Tous, apparemment le truc marche mais sa beug, quand j'exécute et tout,
il m'affiche: buf=----------------------------------------------------------------------------------------------------------------[...]
sur 7.8 ligne de la console.
et quand je ferme et RE- exécute le programme il affiche: buf= [rien].
>>> tout le temps
Merci de m'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Comme l'a dit Fiddy, la fonction rand() retourne une valeur aléatoire dans un intervalle bien défini. Cet intervalle est [0; RAND_MAX] sachant que RAND_MAX est une valeur assez grande (pour plus de précision sur cette valeur, voir le header stdlib).
Mais toi ce que tu veux, c'est un nombre aléatoire compris entre 0 et 6, car tu as 6 mots dans ton tableau, donc afin de réduire ce nombre aléatoire sortant de rand() dans l'intervalle [0;6] il faut que tu effectues un modulo (symbole %).
int nombre_hasard()
{
int nb;
nb=rand() % 7; /* renvoie le reste de la division euclidienne de rand() par 7 -> un nombre dans [0;6]*/
return nb;
}
Après si tu veux utiliser srand(), qui permet une plus grande entropie, tu devras faire un truc de ce style :
int nombre_hasard()
{
int nb;
srand(time(NULL));
nb=rand() % 7; /* Dans ce cas, on appelle le générateur pseudo-aléatoire qui a été initialisé au préalable avec une "graine" de départ */
return nb;
}
Après j'ai pas compilé ni exécuté, je te laisse le soin de le faire.
Yakari
Mais toi ce que tu veux, c'est un nombre aléatoire compris entre 0 et 6, car tu as 6 mots dans ton tableau, donc afin de réduire ce nombre aléatoire sortant de rand() dans l'intervalle [0;6] il faut que tu effectues un modulo (symbole %).
int nombre_hasard()
{
int nb;
nb=rand() % 7; /* renvoie le reste de la division euclidienne de rand() par 7 -> un nombre dans [0;6]*/
return nb;
}
Après si tu veux utiliser srand(), qui permet une plus grande entropie, tu devras faire un truc de ce style :
int nombre_hasard()
{
int nb;
srand(time(NULL));
nb=rand() % 7; /* Dans ce cas, on appelle le générateur pseudo-aléatoire qui a été initialisé au préalable avec une "graine" de départ */
return nb;
}
Après j'ai pas compilé ni exécuté, je te laisse le soin de le faire.
Yakari
Merci, mais pourquoi 7 et pas 6. Je n'est pas 7 mots a choisir! ?
Si je met comme tu as mis euh... Yakari. Le programme va marcher?
Donc on dit que c'est un générateur pseudo-aléatoire quand il y a % [suivi d'un chiffre ou nb].
Si je comprend bien, le % [chiffre ou nb]>>> ce chiffre ou nb est la valeur maximum que "j'autorise a l'ordinateur ( ou programme ) de choisir au hasard"
Mais je vais essayer avec ton post, Yakari
@ Tous: encore une foie merci d'aider un jeune débutant ! ! ! !
Si je met comme tu as mis euh... Yakari. Le programme va marcher?
Donc on dit que c'est un générateur pseudo-aléatoire quand il y a % [suivi d'un chiffre ou nb].
Si je comprend bien, le % [chiffre ou nb]>>> ce chiffre ou nb est la valeur maximum que "j'autorise a l'ordinateur ( ou programme ) de choisir au hasard"
Mais je vais essayer avec ton post, Yakari
@ Tous: encore une foie merci d'aider un jeune débutant ! ! ! !
Pour ceux que sa intéresse je viens de faire un exemple du hasard :
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
char question[25] ;
int presentation ;
int hasard;
int nombre;
int choisir ;
int main()
{
while ( question!="exit")
{
if ( choisir==0) {
srand(time(NULL));
hasard=(rand()%999)+1;
choisir=1 ;
}
if (presentation==0){
cout << "**Bienvenue au jeux du HASARD***" << endl;
presentation=1;
}
cout <<"entrer un nombre entre 1 et 1000"<< endl ;
cin >> nombre ;
if (hasard==nombre) {
cout << "vous avez GAGNER !!!"<< endl;
choisir=0;
}
cout << "vous avez mis "<< nombre << endl;
cout << "alor que le nombre est " << hasard << endl;
}
return 0;
}
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
char question[25] ;
int presentation ;
int hasard;
int nombre;
int choisir ;
int main()
{
while ( question!="exit")
{
if ( choisir==0) {
srand(time(NULL));
hasard=(rand()%999)+1;
choisir=1 ;
}
if (presentation==0){
cout << "**Bienvenue au jeux du HASARD***" << endl;
presentation=1;
}
cout <<"entrer un nombre entre 1 et 1000"<< endl ;
cin >> nombre ;
if (hasard==nombre) {
cout << "vous avez GAGNER !!!"<< endl;
choisir=0;
}
cout << "vous avez mis "<< nombre << endl;
cout << "alor que le nombre est " << hasard << endl;
}
return 0;
}
oui mai il y a pas plus clair comme démonstration après il faut juste adapter le code.
celui qui cherche a créer du hasard dans son code peu facilement comprendre les choses par raport a mon code source et puis le language C
j'en en fait que un mois
celui qui cherche a créer du hasard dans son code peu facilement comprendre les choses par raport a mon code source et puis le language C
j'en en fait que un mois
Pas plus clair ?
Le mieux est de renvoyer sur un lien ou de faire un code exempt de fautes ^^.
Là tu utilises question!="exit" qui est totalement faux. Et tu parles de C++ alors que nous on parle de C.
Je ne parle même pas du fait que le modulo est à éviter pour le rand et qu'il vaut mieux utiliser la multiplication et la division afin d'éviter d'avoir une probabilité fausse.
Voici un exemple de rand :
Sinon voici un lien qui explique cela : https://nicolasj.developpez.com/articles/libc/hasard/
Cdlt
Le mieux est de renvoyer sur un lien ou de faire un code exempt de fautes ^^.
Là tu utilises question!="exit" qui est totalement faux. Et tu parles de C++ alors que nous on parle de C.
Je ne parle même pas du fait que le modulo est à éviter pour le rand et qu'il vaut mieux utiliser la multiplication et la division afin d'éviter d'avoir une probabilité fausse.
Voici un exemple de rand :
#include <stdio.h> #include <stdlib.h> #include <time.h> int alea(void) { return (int) (int)(rand() / RAND_MAX * 6); } int main(void) { int nb; srand(time(NULL)); nb=alea(); printf("%d\n",nb); return 0; }
Sinon voici un lien qui explique cela : https://nicolasj.developpez.com/articles/libc/hasard/
Cdlt
c'est pas parceque toi sa te plait pas que sa ne plaira pas a d'autre.
mon code fonctionne très bien pour débuter, la seule différence entre le C et le C++ c'est que j'utilise cout et cin qui me semble plus clair.
Adapte mon code a ta façon et du vérra la différence
mon code fonctionne très bien pour débuter, la seule différence entre le C et le C++ c'est que j'utilise cout et cin qui me semble plus clair.
Adapte mon code a ta façon et du vérra la différence
Oui fiddy tu as raison pour le srand() (mais où avais-je la tête... ^^).
Sinon j'ai regardé les autres messages et je suis d'accord avec toi (fiddy), ce qu'a écrit dream666 est inexacte donc pas très utile pour un débutant. De plus, j'ajouterais (pour dream666) que quitte à utiliser le C++, je vois pas pourquoi tu n'utilises pas la classe string qui est plus facile à utiliser que les tableaux de "char".
Yakari
Sinon j'ai regardé les autres messages et je suis d'accord avec toi (fiddy), ce qu'a écrit dream666 est inexacte donc pas très utile pour un débutant. De plus, j'ajouterais (pour dream666) que quitte à utiliser le C++, je vois pas pourquoi tu n'utilises pas la classe string qui est plus facile à utiliser que les tableaux de "char".
Yakari
Sauf que je n'ai pas chercher a faire quelque chose de propre pour mettre en boucle sinon j'orais fait une sortie de boucle deja, en s'en fou de while avec char le principal c'est qu'on peu jouer avec les conditions et le hasard
celui qui des le début regarde mon code, il va comprendre du premier coup d'oeil comment manier les if et rand()
la plus part des programmation sont les même il sufi de s'adapter au code, il n'est pas dificile de modifier mon code en pure language C en tant que débutant.
et dalleur mon code fonctionne
celui qui des le début regarde mon code, il va comprendre du premier coup d'oeil comment manier les if et rand()
la plus part des programmation sont les même il sufi de s'adapter au code, il n'est pas dificile de modifier mon code en pure language C en tant que débutant.
et dalleur mon code fonctionne