Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

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 ????


1, 2, 3, 4 ··· 7, 8, 9 Suivante
Lephenixnoir Hors ligne Administrateur Points: 20993 Défis: 143 Message

Citer : Posté le 21/04/2014 18:17 | #


Le code est identé en C, ce n'est pas obligatoire mais c'est mieux.
Au fait, GetKey(&key) ne renvoie rien, alors que Print attend un argument qui est une chaîne de caractères.
Donc ça ne peut pas fonctionner.

#include <stdio.h>
int AddIn_Main(...)
{
  char ch[20]; // ceci est une chaine de caracteres
  unsigned int key,

  GetKey(&key);
  sprintf(ch,"%d",key);
  locate(1,1); Print((const unsigned char *)ch);
  while(1) GetKey(&key);
}


Ajouté le 21/04/2014 à 18:17 :
ElToredo, Print existe aussi, tu sais.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 21/04/2014 18:19 | #


lorsque je rentre ton code lephen ca me met error
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/04/2014 18:21 | #


Il doit te manquer les dernieres lignes a ne jamais oublier

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

Citer : Posté le 21/04/2014 18:24 | #


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




Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 21/04/2014 19:16 | #


Tout les bout de code qui sont en commentaires et autres dans un fichier de base par défaut.
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 09/05/2014 17:32 | #


salut là j'apprends le C sur code::blocs et je suis en train de fair eun +ou- mais il y a une erreur et je ne sais pas où... pouvez vous m'aidez svp ?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ( int argc, char** argv )
{
    srand(time(NULL));
    nombre_mystere=(rand()%(100-1+1)+1);
    int nombre_entre=0, essais=0;
    while (nombre_entre!=nombre_mystere)
    {
        essais++;
        printf("Quel est le nombre mystere ?");
        scanf("%d", &nombre_entre);
        if (nombre_entre<nombre_mystere);
            printf("Le nombre mystere est plus grand");
        else if (nombre_entre>nombre_mystere);
            printf("Le nombre mystere est plus petit");
    }
    if (essais==1)
        printf("Bravo !!! Vous avez trouvé le nombre mystere en 1 essai");
    else
        printf("Bravo !!! Vous avez trouvé le nombre mystere en %d essai",essais);
}

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




Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1238 Défis: 54 Message

Citer : Posté le 09/05/2014 17:35 | #


Un plus ou moins !!

Sinon, tu as un point virgule après tes conditions, ton compilo ne doit pas aimer je pense ;).
Si jamais, regarde ton debugger quand tu as un soucis, il dit des choses intéressantes en général :).
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 09/05/2014 17:37 | #


>< en effet merci mais ca ne résoud pas tout...
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Eltoredo Hors ligne Modérateur Points: 4299 Défis: 35 Message

Citer : Posté le 09/05/2014 17:38 | #


Dit nous a quelle ligne le compilo donne l'erreur sinon
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Lephenixnoir Hors ligne Administrateur Points: 20993 Défis: 143 Message

Citer : Posté le 09/05/2014 17:38 | #


On ne met de ';' qu'à la fin des instructions.
if(a==1) n'est pas une instruction.

En fait,
if(a==1);
{
  [i]instructions[/i]
}

équivaut à
if(a==1)
{
  // vide a cause du ';'
}
{ // accolade inutile
  [i]instructions[/i]
} // accolade inutile

ce qui équivaut encore à
[i]instructions[/i]

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

Citer : Posté le 09/05/2014 18:46 | #


nan en fait c'est bon merci

Ajouté le 09/05/2014 à 18:57 :
j'avais pas déclaré le nombre_mystere

Ajouté le 11/05/2014 à 19:18 :
a cette fois je suis vraiment perdu...
ceci est du C pour ordi et non pas pour SDK. je suis en train de faire un pierre feuille ciseaux mais je ne comprends pas il n'accepte pas les char...
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int choix_joueur=0, choix_IA=0;


int randomNum(int min, int max){
    srand(time(NULL));
    return ((float)(max-min)*rand()/RAND_MAX)+min;
}
int menu () {
    printf("1=Pierre\n");
    printf("2=Feuille\n");
    printf("3=Ciseaux\n");
    while (choix_joueur<1 || choix_joueur>3) {
       scanf ("%d", &choix_joueur);
    }
    return choix_joueur;

}

int main()
{
    choix_joueur=menu();
    if (choix_joueur==1)    char choix_joueur_txt[]="Pierre";
    if (choix_joueur==2)    char choix_joueur_txt[]="Feuille";
    if (choix_joueur==3)    char choix_joueur_txt[]="Ciseaux";
    choix_IA=randomNum(1,3);
    printf ("Vous avez choisi %s et l'ordi a choisi %s\n ", choix_joueur_txt, choix_IA_txt);
    if (choix_IA==choix_joueur+1)   printf ("Perdu...");
    if (choix_IA==choix_joueur-2)   printf ("Perdu...");
    if (choix_IA==choix_joueur-1)   printf ("Gagne !!!");
    if (choix_IA==choix_joueur+2)   printf ("Gagne !!!");
    if (choix_IA==choix_joueur)     printf ("Match nul.");
    return 0;
}

voilà si qqn peut m'aider...
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 20993 Défis: 143 Message

Citer : Posté le 11/05/2014 19:20 | #


Non, car tes variables n'existent que dans le bloc où elles sont définies, et ici ton bloc c'est le if.
Donc tes variables n'existent pas.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

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


a bon ? il faut que je les initialise avant ? mais est-ce que je peux changer leur texte dans le if ?
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 20993 Défis: 143 Message

Citer : Posté le 11/05/2014 19:23 | #


Oui, avec sprintf().
#include <stdio.h>
sprinf(chaine,"Texte");

Fonctionne comme printf donc tu peux mettre des %d et autres.
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

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


alors j'ai rien capté à ce que tu m'as dit mais j'ai bidouillé d'autres trucs et ca a marché
fallait mettre ca au début :
char *choix_joueur_txt;
char *choix_IA_txt;

et remplacer ca :
      if (choix_joueur==1)    char choix_joueur_txt[]="Pierre";
     if (choix_joueur==2)    char choix_joueur_txt[]="Feuille";
     if (choix_joueur==3)    char choix_joueur_txt[]="Ciseaux";

par ca :
        if (choix_joueur==1)    choix_joueur_txt="pierre";
        if (choix_joueur==2)    choix_joueur_txt="feuille";
        if (choix_joueur==3)    choix_joueur_txt="ciseaux";


Ajouté le 12/05/2014 à 13:27 :
et voici le code final pour ceux qui veulent voir :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int choix_joueur=0, choix_IA=0, quitter=0;

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");
    while (choix_joueur<1 || choix_joueur>3) {
       scanf ("%d", &choix_joueur);
    }
    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";
        choix_IA=randomNum(1,3);
        if (choix_IA==1)    choix_IA_txt="pierre";
        if (choix_IA==2)    choix_IA_txt="feuille";
        if (choix_IA==3)    choix_IA_txt="ciseaux";
        printf ("Vous avez choisi %s et l'ordi a choisi %s\n", choix_joueur_txt, choix_IA_txt);
        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_IA==choix_joueur)     printf ("Match nul.\n");
        printf("Continuer ?  1=Oui  2=Non\n");
        scanf("%d", &quitter);
        quitter --;
    }
    return 0;
}


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




Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

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


Je crois qu'utiliser un switch de façon a avoir
switch (choix_joueur)
{
case 1:
    choix_joueur_txt=[gray]"pierre"[/gray];
[b][blue]break[/blue][/b];
case 2:
    choix_joueur_txt=[gray]"feuille"[/gray];
[b][blue]break[/blue][/b];
case 3 :
   choix_joueur_txt=[gray]"ciseaux"[/gray];
[b][blue]break[/blue][/b];
}

rendrait le code plus lisible (mais je ne sais pas si tu l'as déja vue...)
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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


if (choix_joueur==1)    extern char choix_joueur_txt[]="Pierre";
     if (choix_joueur==2)   extern char choix_joueur_txt[]="Feuille";
     if (choix_joueur==3)   extern char choix_joueur_txt[]="Ciseaux";


tu auras pu faire ...
Dark storm En ligne Labélisateur Points: 11541 Défis: 176 Message

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


Ben tu peux toujours faire
unsigned char *choix_joueur_texte;

swich(choix_joueur)
{
    case 1: choix_joueur_texte = (unsigned char*)malloc(7); // "pierre" prend 7 cases de tableau ('p', 'i', 'e', 'r', 'r', 'e', '\0')
        sprintf("%s", choix_joueur_texte, "pierre");
        break;
    case 2: choix_joueur_texte = (unsigned char*)malloc(8);
        sprintf("%s", choix_joueur_texte, "feuille");
        break;
    case 3: choix_joueur_texte = (unsigned char*)malloc(8);
        sprintf("%s", choix_joueur_texte, "ciseaux");
        break;
}

...

free(choix_joueur_texte); // pas oublier de libérer la mémoire

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Drac0300 Hors ligne Membre Points: 839 Défis: 39 Message

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


Pourquoi alloues-tu la chaine dynamiquement ? un
unsigned char choix_joueur_texte[7] ;

ne suffirait-il pas ?
Dans Z/1Z, 42==666
Coïncidence ? Je ne pense pas.
Dark storm En ligne Labélisateur Points: 11541 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
1, 2, 3, 4 ··· 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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 79 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