Rand avec un string ?
Mendoza
-
Mendoza -
Mendoza -
Bonsoir,
J'aimerai choisir un string au hasard et l'affiché, comment faire ?
Pour l'instant, j'ai déjà fait ça :
Donc voilà, comment faire pour qu'il choisisse au hasard un des justificatifs et ensuite me l'afficher. Je ferais de même pour les autres fonctions.
D'avance, merci.
J'aimerai choisir un string au hasard et l'affiché, comment faire ?
Pour l'instant, j'ai déjà fait ça :
#include <stdio.h>
#include <stdlib.h>
void justificatif ();
void qualificatif ();
void deuxièmeQualificatif ();
void messageFin ();
int main(int argc, char **argv)
{
char reponse;
printf("Voulez-vous choisir un justificatif ? (O/N)");
scanf("%c", &reponse);
if (reponse=='O') {
justificatif
}
printf("Voulez-vous choisir un qualificatif ? (O/N)");
scanf("%c", &reponse);
if (reponse=='O') {
justificatif
}
printf("Voulez-vous choisir un deuxième qualificatif ? (O/N)");
scanf("%c", &reponse);
if (reponse=='O') {
justificatif
}
printf("Voulez-vous choisir un message de fin ? (O/N)");
scanf("%c", &reponse);
if (reponse=='O') {
justificatif
}
return 0;
}
void justificatif () {
char j1[13]="Cause Départ\0";
printf ("%s\n", j1);
char j2[14]="Double emploi\0";
printf ("%s\n", j2);
char j3[6]="Décès\0";
printf ("%s\n", j3);
}
void qualificatif () {
}
void deuxièmeQualificatif (){
}
void messageFin (){
}
Donc voilà, comment faire pour qu'il choisisse au hasard un des justificatifs et ensuite me l'afficher. Je ferais de même pour les autres fonctions.
D'avance, merci.
1 réponse
Bonjour,
justificatif => justificatif();
scanf("%c", &reponse)
rajoute un getchar(); après le scanf(). Cela aura pour effet de vider le '\n' résidant dans le buffer clavier.
char j1[13]="Cause Départ\0";
Pour info, pas besoin de mettre le \0, il sera rajouté tout seul. De plus, tu n'as pas besoin non plus d'indiquer la taille. Ainsi : char j1[]="Cause Depart"; fonctionne. Fais attention aux accents. Tu risques d'avoir un problème en fonction de l'encodage. Si tu veux impérativement un accent, utilise les wide char.
Sinon, je n'ai pas bien compris ta question.
Si tu veux du hasard :
Tu initialises la graine avec : srand(time(NULL));
Tu tires un nombre pseudo aléatoire : rand() % 5; pour avoir un nombre entre 0 et 5 (non compris).
Ensuite, en fonction du nombre tu appelles la fonction que tu veux. Tu peux même utiliser un tableau de pointeurs sur fonctions.
Cdlt,
justificatif => justificatif();
scanf("%c", &reponse)
rajoute un getchar(); après le scanf(). Cela aura pour effet de vider le '\n' résidant dans le buffer clavier.
char j1[13]="Cause Départ\0";
Pour info, pas besoin de mettre le \0, il sera rajouté tout seul. De plus, tu n'as pas besoin non plus d'indiquer la taille. Ainsi : char j1[]="Cause Depart"; fonctionne. Fais attention aux accents. Tu risques d'avoir un problème en fonction de l'encodage. Si tu veux impérativement un accent, utilise les wide char.
Sinon, je n'ai pas bien compris ta question.
Si tu veux du hasard :
Tu initialises la graine avec : srand(time(NULL));
Tu tires un nombre pseudo aléatoire : rand() % 5; pour avoir un nombre entre 0 et 5 (non compris).
Ensuite, en fonction du nombre tu appelles la fonction que tu veux. Tu peux même utiliser un tableau de pointeurs sur fonctions.
Cdlt,
Ce que je veux faire, c'est générer aléatoirement des petites annonces, avec un justificatif, un qualificatif, etc., en fonction du choix de l'utilisateur, d'où le (O/N).
Par exemple :
L'utilisateur répond oui à toutes les questions, à l'affichage il aura donc :
Cause départ - Ingénieur - Son - N° de téléphone : xxxxxxxxxxx
Et donc le problème, c'est cette aléatoire là, comment l'utilisé et ou le placé.
Je ne comprends pas très bien quand tu dis :
"Tu initialises la graine avec : srand(time(NULL));
Tu tires un nombre pseudo aléatoire : rand() % 5; pour avoir un nombre entre 0 et 5 (non compris)."
Pourrais-tu me l'expliquer en l'ajoutant dans le code, pour que je sache où le mettre et comprendre son fonctionnement (je débute seulement en C).
char justif[][25]={"Case depart", "double emploi", ...}; char qualif[][25]={"ingenieur", ...}; char 2ndQualif[][25]={...}; char msgFin[][25]={...};Ensuite justif[0] te retourne "Case depart", justif[1] te retourne "double emploi".
De même avec qualif[0], ...
L'idée est donc de tirer 4 nombres aléatoires : nb1, nb2, nb3, nb4;
La phrase à afficher sera donc :
printf("%s %s %s %s\n", justif[nb1], qualif[nb2], 2ndQualif[nb3], msgFin[nb4]);Pour avoir les nombres aléatoires :
S'il y a des choses que ne comprends pas, je te conseille plutôt de lire un tuto et de commencer progressivement : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c
Cdlt,
J'ai intégrer tes bouts de codes au mien et ça donne ça :
Est-ce que c'est correct ?
scanf("%c", &reponse);
Pourquoi tu mets plusieurs scanf("%c", &reponse); ? Tu as oublié le getchar() comme je t'ai dit.
La solution que je te proposais était encore plus simple.
int main(...) { srand(time(NULL)); /*à ne mettre qu'une seule fois*/ ... message(); } void message(void) { char justif[][25]={"Case depart", "Double emploi", "Deces"}; char qualif[][25]={"Rigoureux", "Dynamique", "Motivé"}; char 2ndQualif[][25]={"Patient", "Soigneux", "Motivé"}; char msgFin[][25]={"Cherche", "Cède", "Rencontrerait"}; int nb1,nb2,nb3,nb4; nb1=rand()%(sizeof justif / sizeof *justif); nb2=...; nb3=...; nb4=...; printf("%s %s %s %s\n", justif[nb1], qualif[nb2], 2ndQualif[nb3], msgFin[nb4]); }