Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » apprentissage du C
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

apprentissage du C

Posté le 21/04/2014 18:14

J'ai décidé d'apprendre le C par ci par là pendant mon temps libre
la je débute avec le SDK mais je ne comprends pas pourquoi le passage suivant est incorrect
    while(1){
locate(5,1);
     Print((unsigned char*)GetKey(&key));
        GetKey(&key);
    }

autre chose : les espaces ne semblent pas importants (contrairement à python) alors pourquoi il y en a t-il partout dans chaque nouvel add-in ????


Précédente 1, 2, 3, 4, 5 ··· 7, 8, 9 Suivante
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 12/05/2014 15:33 | #


Si, mais c'est plus propre dynamiquement : on alloue ce dont on a besoin
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/05/2014 17:03 | #


wowow je n'ai pas tout compris ce que vous avez mis et je trouve mon truc plus simple
@drac je connais les switch mais dans ce cas là ca prends + de place et tu verrais sur code::blocs ya une indentation qui fait que tout est très clair

Ajouté le 12/05/2014 à 18:11 :
j'ai rerajouté des trucs je la posterais en version méga-finale

Ajouté le 12/05/2014 à 19:28 :
help code::blocks me met : code::blocs à cessé de fonctionner...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int choix_joueur=0, choix_IA=0, quitter=0;
char *saisie;
int randomNum(int min, int max){
    srand(time(NULL));
    return ((float)(max-min)*rand()/RAND_MAX)+min;
}
int menu () {
    choix_joueur=0;
    printf("1=Pierre\n");
    printf("2=Feuille\n");
    printf("3=Ciseaux\n");
    printf("4=Lezard\n");
    printf("5=Spock\n");
    while (choix_joueur<1 || choix_joueur>5) {
       scanf ("%s", &saisie);
       choix_joueur=atoi(saisie);
    }
    return choix_joueur;
}

int main()
{
    while (quitter==0) {
        quitter=0;
        char *choix_joueur_txt;
        char *choix_IA_txt;
        choix_joueur=menu();
        if (choix_joueur==1)    choix_joueur_txt="pierre";
        if (choix_joueur==2)    choix_joueur_txt="feuille";
        if (choix_joueur==3)    choix_joueur_txt="ciseaux";
        if (choix_joueur==4)    choix_joueur_txt="lezard";
        if (choix_joueur==5)    choix_joueur_txt="spock";
        choix_IA=randomNum(1,5);
        if (choix_IA==1)    choix_IA_txt="pierre";
        if (choix_IA==2)    choix_IA_txt="feuille";
        if (choix_IA==3)    choix_IA_txt="ciseaux";
        if (choix_IA==4)    choix_IA_txt="lezard";
        if (choix_IA==5)    choix_IA_txt="spock";
        printf ("Vous avez choisi %s et l'ordi a choisi %s\n", choix_joueur_txt, choix_IA_txt);

        if (choix_joueur<4 && choix_IA<4){
            if (choix_IA==choix_joueur+1 || choix_IA==choix_joueur-2)   printf ("Perdu...\n");
            if (choix_IA==choix_joueur-1 || choix_IA==choix_joueur+2)   printf ("Gagne !!!\n");
        }

        if (choix_joueur==4 && choix_IA==5) printf("Gagne !!!\n");
        if (choix_joueur==5 && choix_IA==4) printf("Perdu...\n");

        if (choix_joueur<4 && choix_IA>3){
            if (choix_IA==choix_joueur+3 || choix_IA==4 && choix_joueur==3) printf("Gagne !!!\n");
            else printf("Perdu...\n");
        }

        if (choix_joueur>3 && choix_IA<4){
            if (choix_IA==choix_joueur-3 || choix_IA==3 && choix_joueur==4) printf("Perdu...");
            else printf("Gagne !!!");
        }

        if (choix_IA==choix_joueur) printf ("Match nul.\n");
        printf("Continuer ?  1=Oui  2=Non\n");
        scanf("%d", &quitter);
        quitter --;
    }
    return 0;
}

qui peut m'aider svp ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 12/05/2014 19:31 | #


Plusieurs choses.
while (choix_joueur<1 || choix_joueur>5) {
       scanf ("%s", &saisie);
       choix_joueur=atoi(saisie);
    }

Tu pourrais simplement mettre
while (choix_joueur<1 || choix_joueur>5) {
       scanf ("%d", &choix_joueur);
    }


Ensuite tu ne peux pas assigner une valeur à une chaîne avec '=' ! Donc il ne faut pas mettre
if (choix_IA==1)    choix_IA_txt="pierre";

mais
if (choix_IA==1)    sprintf(choix_IA_txt,"pierre");


Et enfin, plutôt que de mettre des char * pour tes choix, mets
char choix_IA_txt[10];

pour les deux. Parce que là tu as des pointeurs mais pas de mémoire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/05/2014 19:34 | #


mais pourtant pour le pierre feuille ciseaux tout court ca marchait avec ces trucs (j'ai quasi rien changé...) et le choix_IA_txt="pierre" marchait très bien... peux tu essayer le code avec ton IDE pour voir si ca marche stp ?


Ajouté le 12/05/2014 à 19:34 :
et le atoi c'est si la personne rentre du texte
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 12/05/2014 19:37 | #


Ne t'inquiète pas, scanf() gère aussi même si c'est du texte. Et puis atoi() te renverrait aussi une valeur valide.
Je pourrais tester, mais je sais que ça ne fonctionnerait que par chance. Si tu te sers des chaînes comme ça, je peux t'assurer que tu n'ira pas loin avec.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 12/05/2014 21:46 | #


scanf() gère le txt je sais (je le fais d'ailleurs) mais je le met dans une str pasque je peux pas le mettre direct dans une int.
je vais essayer avec ta méthode. je reposte un message pour te dire si c'est bon ou non...

Ajouté le 12/05/2014 à 21:54 :
lephenénixnoir tu es un génie !!! merci Par contre ca m'éclate trop quand ya marqué "Vous avez choisi spock et l'ordi à choisi pierre : vous gagnez !!!"

Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 12/05/2014 21:56 | #


Par contre il faudrait revoir ton algo de test...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 13/05/2014 11:29 | #


quel algo de test ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Al3x Hors ligne Membre Points: 77 Défis: 3 Message

Citer : Posté le 13/05/2014 11:44 | #


Pour éviter les forets de if .. pas jolie jolie .. tu peux faire un tableau de pointeur sur fonction
C'est "complexe" mais si tu comprends ça rend le code plus jolie, plus optimiser etc ...


Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 13/05/2014 11:47 | #


a oui mais moi j'aime bien ma "forêt de if" comme tu dis
pis après je vais pas me compliquer la vie pour un jeu comme ca
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Al3x Hors ligne Membre Points: 77 Défis: 3 Message

Citer : Posté le 13/05/2014 11:52 | #


Certes
Mais il n’empêche que tu pourrai juste y jeter un petit coup d’œil, c'est assez cool
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 13/05/2014 12:05 | #


oui j'ai pas encore vu ca mais ca va pas tarder

Ajouté le 13/05/2014 à 12:06 :
yeah 600 points 8)
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 13/05/2014 15:45 | #


Des tableux de pointeurs sur des fonctions ?
Je veux bien, ils sont jolis et tout mais pour un pierre feuille ciseaux ? Faudrait pas éxagérer quand même.
Et puis Darkysun, si comme tu le dis tu débutes (et que tu as un peu de mal avec les strings, pointeurs par définition), ne t'embête pas avec de tels trucs, c'est vraiment des outils avancés du C.

Je parlais de faire un algo simple. Genre:
// 0=pierre, 1=feuille, 2=ciseaux
if(choixIA%3 == choixUser%3+1) printf("Gagne !\n");
else if(choixIA==choixUser) printf("Egalite !\n");
else printf("Perdu ! \n");


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 13/05/2014 16:15 | #


a oui pour le pierre feuille ciseaux ca marche ca ( j'aurais jamais pensé à faire ca)
mais pas pour le léézard spock où ca rajoute plein de trucs et donc où ton algo est innaproprié
il est vrai que j'ai du mal avec les str : je n'ai même pas encore entamé ce chapitre : j'ai fait en bidouillant avec ce que mon cousin m'a montré mais il ne m'a pas tout expliqué : juste les fonctions de base et principalement le random
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 13/05/2014 16:26 | #


L'algo que je t'ai mis est valable si choixIA et choixUser sont tous les deux inférieurs à 3. Ça permettrait déjà de réduire ta liste de if.
Et à quoi correspondent "lézard" et "spock" ?

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 13/05/2014 16:28 | #


le pierre feuille ciseaux lézard spock à été inventé par big bang théorie : tu peux trouver les règles en tapant pierre feuille ciseaux lézard spock sur Google


Ajouté le 20/05/2014 à 20:51 :
alors voila : j'ai commencé le SDK mtn et j'ai des erreurs avec ca :
/*****************************************************************/
/*                                                               */
/*   CASIO fx-9860G SDK Library                                  */
/*                                                               */
/*   File name : [ProjectName].c                                 */
/*                                                               */
/*   Copyright (c) 2006 CASIO COMPUTER CO., LTD.                 */
/*                                                               */
/*****************************************************************/
#include "fxlib.h"


//****************************************************************************
//  AddIn_main (Sample program main function)
//
//  param   :   isAppli   : 1 = This application is launched by MAIN MENU.
//                        : 0 = This application is launched by a strip in eACT application.
//
//              OptionNum : Strip number (0~3)
//                         (This parameter is only used when isAppli parameter is 0.)
//
//  retval  :   1 = No error / 0 = Error
//
//****************************************************************************
int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key;
int IsKeyDown(int keycode);

    Bdisp_AllClr_DDVRAM();
while(1) {
If(IsKeyDown(KEY_CTRL_EXE)==1){
PrintMini(50,30,"Salut !",2);
}else {
PrintMini(50,30,"EXE...",1);
}
}


    while(1){
        GetKey(&key);
    }

    return 1;
}




//****************************************************************************
//**************                                              ****************
//**************                 Notice!                      ****************
//**************                                              ****************
//**************  Please do not change the following source.  ****************
//**************                                              ****************
//****************************************************************************


#pragma section _BR_Size
unsigned long BR_Size;
#pragma section


#pragma section _TOP

//****************************************************************************
//  InitializeSystem
//
//  param   :   isAppli   : 1 = Application / 0 = eActivity
//              OptionNum : Option Number (only eActivity)
//
//  retval  :   1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
    return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}

#pragma section


Ce méchant SDK me réponds ca :
Executing Hitachi SH C/C++ Compiler/Assembler phase

set SHC_INC=C:\SAV\ALEX\SDK\OS\SH\include
set PATH=C:\SAV\ALEX\SDK\OS\SH\bin
set SHC_LIB=C:\SAV\ALEX\SDK\OS\SH\bin
set SHC_TMP=C:\SAV\ALEX\SDK\essais\essais\Debug
"C:\SAV\ALEX\SDK\OS\SH\bin\shc.exe" -subcommand=C:\Users\AAAB\AppData\Local\Temp\hmk2C51.tmp
C:\SAV\ALEX\SDK\essais\essais\essai1.c(32) : C2500 (E) Illegal token "{"
C:\SAV\ALEX\SDK\essais\essais\essai1.c(33) : C1016 (W) Argument mismatch
C:\SAV\ALEX\SDK\essais\essais\essai1.c(34) : C2500 (E) Illegal token "else"
C:\SAV\ALEX\SDK\essais\essais\essai1.c(35) : C1016 (W) Argument mismatch

HMAKE MAKE UTILITY Ver. 1.1
Copyright (C) Hitachi Micro Systems Europe Ltd. 1998
Copyright (C) Hitachi Ltd. 1998


    ERROR: Process failed with return code: 1
Build was not successful.

Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 20/05/2014 20:54 | #


Indente ton code.
Et c'est à cause du int IsKeyDown() qui n'a rien à faire dans le main et qui de toute manière est inutile vu que tu as inclus fxlib.h.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 21/05/2014 10:55 | #


Sinon plus facile qu'un tableau de pointeurs sur fonctions, pourquoi tu ne ferais pas des switch ?
1337
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/05/2014 12:19 | #


J'aimerais savoir pourquoi tu parles d'un tableau de fonctions. Il n'y en a nulle part dans ce code.
Et que veux-tu remplacer par un switch ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 21/05/2014 15:09 | #


prof Lephenixnoir, j'ai indenté et ca ne marche toujours pas pourquoi ? (et déjà depuis quand faut indenter en C )
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 21/05/2014 15:10 | #


Indenter c'est rajouter des tabulations ("Tab").
Petite illustration pour te montrer l'utilité:
Exemple 1
Cliquer pour enrouler
#include "fxlib.h"
#include "MonochromeLib.h"
#include "memory.h"
#include "AGBS.h"
#include "jeu.h"
#include <stdio.h>
#include <stdlib.h>


void monde_3()
{
unsigned int x_pointeur, x_fond;
unsigned int key, nbr, debloque;
unsigned char buffer[9];
int handle;

// LECTURE ET ANALYSE FICHIER
handle = memory_openfile("\\\\fls0\\angrysw.rgl",_OPENMODE_READ);
memory_readfile(handle,buffer,7,15);
memory_closefile(handle);
nbr = -1;
debloque = 0;
do{
nbr++;
if(buffer[nbr] == '1') debloque++;
else break;
}while(1);


x_pointeur = 0;
x_fond = 0;

do{
Bdisp_AllClr_DDVRAM();
ML_bmp_or_cl(fond, x_fond, 0, 191, 64);
ML_circle(10+12*x_pointeur, 31, 10, ML_BLACK);
ML_circle(11+12*x_pointeur, 32, 10, ML_BLACK);
for(nbr = debloque; nbr<7; nbr++){
ML_filled_circle(52+21*nbr+x_fond, 31, 8, ML_BLACK);
}
GetKey(&key);

if(key==KEY_CTRL_EXIT){
x_pointeur = 0;
x_fond = 0;
}
if(key==KEY_CTRL_LEFT && x_pointeur>0){
x_pointeur--;
x_fond += 9;
}
if(key==KEY_CTRL_RIGHT && x_pointeur<debloque+1){
x_pointeur++;
x_fond -= 9;
}
if(key==KEY_CTRL_EXE) break;
}while(1);
if(x_pointeur > 0) level(3, x_pointeur);
while(IsKeyDown(KEY_CTRL_EXE));
}

Exemple 2
Cliquer pour enrouler
#include "fxlib.h"
#include "MonochromeLib.h"
#include "memory.h"
#include "AGBS.h"
#include "jeu.h"
#include <stdio.h>
#include <stdlib.h>

void monde_3()
{
    unsigned int x_pointeur, x_fond;
    unsigned int key, nbr, debloque;
    unsigned char buffer[9];
    int handle;
    
    // LECTURE ET ANALYSE FICHIER
    handle = memory_openfile("\\\\fls0\\angrysw.rgl",_OPENMODE_READ);
    memory_readfile(handle,buffer,7,15);
    memory_closefile(handle);
    nbr = -1;
    debloque = 0;
    do{
        nbr++;
        if(buffer[nbr] == '1') debloque++;
        else break;
    }while(1);
    
    
    x_pointeur = 0;
    x_fond = 0;
    
    do{
        Bdisp_AllClr_DDVRAM();
        ML_bmp_or_cl(fond, x_fond, 0, 191, 64);
        ML_circle(10+12*x_pointeur, 31, 10, ML_BLACK);
        ML_circle(11+12*x_pointeur, 32, 10, ML_BLACK);
        for(nbr = debloque; nbr<7; nbr++){
            ML_filled_circle(52+21*nbr+x_fond, 31, 8, ML_BLACK);
        }
        GetKey(&key);
        
        if(key==KEY_CTRL_EXIT){
            x_pointeur = 0;
            x_fond = 0;
        }
        if(key==KEY_CTRL_LEFT && x_pointeur>0){
            x_pointeur--;
            x_fond += 9;
        }
        if(key==KEY_CTRL_RIGHT && x_pointeur<debloque+1){
            x_pointeur++;
            x_fond -= 9;
        }
        if(key==KEY_CTRL_EXE) break;
    }while(1);
    if(x_pointeur > 0) level(3, x_pointeur);
    while(IsKeyDown(KEY_CTRL_EXE));
}

Tu preferes lequel ?
Ca permet de rendre le code plus lisible mais ça ne change en rien le contenu pour le compilo
If(IsKeyDown(KEY_CTRL_EXE)==1)

if(IsKeyDown(KEY_CTRL_EXE)==1)

Pas de majuscule
Précédente 1, 2, 3, 4, 5 ··· 7, 8, 9 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 91 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd