[C] Variable à plusieurs choix

Résolu/Fermé
Ashikonaruki Messages postés 30 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 19 juillet 2010 - 19 juil. 2010 à 20:55
Mr. D@RK Messages postés 26 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 16 octobre 2010 - 20 juil. 2010 à 01:00
Bonsoir,

Alors je débute (vraiment début) en programmation et j'aimerai créer un logiciel qui, pour un nombre donné, me donnent (au pif) un autre nombre. Je m'explique.

Pour l'instant j'ai donc ça :

int main ()
{
int choixRecompense = 0;
printf("=== QUELLE SERA LA RECOMPENSE ? ===\n\n\n\n");
printf("1. Armes Ancestrales\n\n");
printf("2. Armes Vampiriques\n\n");
printf("3. Anneaux Normaux\n\n");
printf("4. Boucles Normales\n\n");
printf("5. Anneaux Speciaux\n\n");
printf("6. Boucles Speciales\n\n");
printf("Quelle est la recompense a donner ?");
printf("\n\n");
scanf("%d", &choixRecompense);
printf("\n\n");

switch (choixRecompense)
{
case 1:
printf("", armes_ances);
break;
case 2:
printf("", armes_vampi);
break;
case 3:
printf("", anneaux_normaux);
break;
case 4:
printf("", boucles_normales);
break;
case 5:
printf("", anneaux_speciaux);
break;
case 6:
printf("", boucles_speciales);
break;
default:
printf("Aucune des possibilites ne correspond a ton choix.");
break;
}
getchar();
getchar();
return 0;
}


Je voudrai donc créer une variable pour chacune d'entre elle, disposant de plusieurs nombres.

Par exemple la variable armes_ances devrait pouvoir valoir 22500, comme 22501, 22502, 22503, 22504 ou 22505.

Donc en exécutant mon programme, et en choisissant 1 comme valeur pour la variable choixRecompense dans le scanf correspondant, je voudrai que le switch réponde par UNE SEULE des 5 valeurs de armes_ances et ce au pif (donc une fois l'un, une fois l'autre..)

Merci d'avance à ceux qui sauront m'aider.

Cordialement,

Ashikonaruki.

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
19 juil. 2010 à 23:05
Bonjour,

Tu peux faire un tableau à deux dimensions.
La première dimension contiendra le choix de l'utilisateur (de 0 à 5) et la deuxième dimension contient tous les nombres possibles pour chacun des cas.
Par exemple :
srand(time(NULL));
int tab[6][6]= {{22500,22501,22502,22503,22504,22505}, ...};

scanf("%d", &choixRecompense);
nbHasard=rand()%6;
printf("%d",tab[choixRecompense-1][nbHasard]);

Après, c'est à améliorer grandement. Du genre si l'équiprobabilité du générateur aléatoire est important, tu pourras utiliser une bonne vieille règle de trois pour se baser sur les bits de poids forts.
Ensuite, le tableau peut être adapté aussi suivant le nombre de valeurs à stocker.
etc.
Cdlt,
1
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 103
19 juil. 2010 à 20:58
je ne suis pas sûr que ça existe en C, mais tu peux peut être faire des arrays

ensuite, tu tire un nombre aléatoire et tu prend la valeur correspondante dans ton tableau ;)
0
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 103
19 juil. 2010 à 20:59
0
Ashikonaruki Messages postés 30 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 19 juillet 2010 7
19 juil. 2010 à 23:51
Bonsoir,

Finalement un ami ingénieur en informatique s'est connecté alors qu'il était censé être absent pendant un certain temps, du coup il m'a aidé en direct par msn.

Au cas où ça en intéresseraient certain je met mon nouveau code, il suffit de comprendre les modulos, le srand et le switch :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main ()
{
    srand(time(NULL));

    int choixRecompense = 0;
    int armes_ances = 0;
    int anneaux_speciaux = 0;
    int armes_vampi = 0;
    int anneaux_normaux = 0;
    int boucles_speciales = 0;
    int boucles_normales = 0;

        printf("=== QUELLE SERA LA RECOMPENSE ? ===\n\n\n\n");
        printf("1. Armes Ancestrales\n\n");
        printf("2. Armes Vampiriques\n\n");
        printf("3. Anneaux Normaux\n\n");
        printf("4. Boucles Normales\n\n");
        printf("5. Anneaux Speciaux\n\n");
        printf("6. Boucles Speciales\n\n");
        printf("Quelle est la recompense a donner ?");
        printf("\n\n\n\n");
        scanf("%d", &choixRecompense);
        printf("\n\n");


    switch (choixRecompense)
    {
    case 1:
        armes_ances = rand()%(22509-22500) + 22500;
        printf("%d", armes_ances);
        printf("\n\nN'oublis pas le /ritem, l'arme placee, puis le /ritem 0 0 6\n\n");
        break;
    case 2:
        armes_vampi = rand()%(22519-22510) + 22510;
        printf("%d", armes_vampi);
        printf("\n\nN'oublis pas le /ritem, l'arme placee, puis le /ritem 0 0 8\n\n");
        break;
    case 3:
        anneaux_normaux = rand()%4;
            switch(anneaux_normaux)
            {
            case 1:
                anneaux_normaux = 0;
                printf("\n\n2596\n\n");
                break;
            case 2:
                anneaux_normaux = 1;
                printf("\n\n2106\n\n");
                break;
            case 3:
                anneaux_normaux = 2;
                printf("\n\n2608\n\n");
                break;
            case 4:
                anneaux_normaux = 3;
                printf("'\n\n2614\n\n");
                break;
            }
        printf("\n\nN'oublis pas le /ra 20 !!\n\n");
        break;
    case 4:
        boucles_normales = rand()%2;
            switch(boucles_normales)
            {
            case 1:
                boucles_normales = 0;
                printf("\n\n26468\n\n");
                break;
            case 2:
                boucles_normales = 1;
                printf("\n\n26469\n\n");
                break;
            }
        printf("\n\nN'oublis pas le /ra 20 !!\n\n");
        break;
    case 5:
        anneaux_speciaux = rand()%4;
            switch(anneaux_speciaux)
            {
            case 1:
                anneaux_speciaux = 0;
                printf("\n\n20211\n\n");
                break;
            case 2:
                anneaux_speciaux = 1;
                printf("\n\n20212\n\n");
                break;
            case 3:
                anneaux_speciaux = 2;
                printf("\n\n20213\n\n");
                break;
            case 4:
                anneaux_speciaux = 3;
                printf("\n\n20214\n\n");
                break;
            }
        printf("\n\nN'oublis pas le /ra 15 !!\n\n");
        break;
    case 6:
        boucles_speciales = rand()%2;
            switch(boucles_speciales)
            {
            case 1:
                boucles_speciales = 0;
                printf("\n\n20215\n\n");
                break;
            case 2:
                boucles_speciales = 1;
                printf("\n\n20216\n\n");
                break;
            }
        printf("\n\nN'oublis pas le /ra 15 !!\n\n");
        break;
    default:
        printf("Aucune des possibilites ne correspond a ton choix.");
        break;
    }


Avec ça j'ai pu insérer une valeur choisie au pif, puis soit la prendre directement lorsque c'était une suite normale, soit la remplacer par une autre valeur grâce à un switch lorsque c'étaient des valeurs n'ayant rien à voir les unes avec les autres.

Merci à vous deux pour votre aide !

Cordialement,

Ashikonaruki.
0
Mr. D@RK Messages postés 26 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 16 octobre 2010 28
20 juil. 2010 à 01:00
Je préfère l'idée de Fiddy au lieu du switch...
0