Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» Bla Bla général du Jury
maxiNoob apprend le C EmptyJeu 21 Mar 2024 - 8:51 par Dom50

» carte mère Oric (re)tracée
maxiNoob apprend le C EmptyMar 5 Mar 2024 - 18:54 par kenneth

» Meurtre à Grande Vitesse
maxiNoob apprend le C EmptyDim 25 Fév 2024 - 5:09 par Iurius

» ORIC-1 sur LE BON COIN
maxiNoob apprend le C EmptyVen 23 Fév 2024 - 23:01 par Mcar

» ORIC ATMOS sur LE BON COIN
maxiNoob apprend le C EmptyDim 4 Fév 2024 - 12:06 par kiwilevrai

» Problème d'affichage des couleurs avec un Oric Atmos
maxiNoob apprend le C EmptySam 27 Jan 2024 - 1:26 par pierbail

» Bienvenue dans le Forum des Oriciens
maxiNoob apprend le C EmptyMar 9 Jan 2024 - 12:33 par Dom50

» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
maxiNoob apprend le C EmptyVen 29 Déc 2023 - 14:13 par Arcade-des-Monts

» Bonnes fêtes
maxiNoob apprend le C EmptyMar 26 Déc 2023 - 10:21 par Dom50

» Murders in Venice / Meutres à Venise
maxiNoob apprend le C EmptySam 18 Nov 2023 - 22:44 par retroric

» Un clavier PS/2 pour tester un ORIC
maxiNoob apprend le C EmptyDim 27 Aoû 2023 - 9:49 par Voyageur

» Disquette 3" Sedoric
maxiNoob apprend le C EmptyMar 1 Aoû 2023 - 14:22 par AtomeX

» faire un 6502 avec des phototransistor
maxiNoob apprend le C EmptyDim 16 Juil 2023 - 17:26 par Voyageur

» Oricutron linux et DSK
maxiNoob apprend le C EmptyJeu 29 Juin 2023 - 18:34 par Voyageur

» No Problem !
maxiNoob apprend le C EmptyDim 25 Juin 2023 - 17:53 par Voyageur

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 241 membres enregistrés
L'utilisateur enregistré le plus récent est ben_frog

Nos membres ont posté un total de 8921 messages dans 811 sujets
Sites Sympas

> Culture Club


Le Deal du moment : -24%
PC Portable Gaming 15.6″ Medion Erazer Deputy ...
Voir le deal
759.99 €

maxiNoob apprend le C

+6
Admin
Godzil
didierv
Arnoric
Symoon
maximus
10 participants

Page 1 sur 2 1, 2  Suivant

Aller en bas

maxiNoob apprend le C Empty maxiNoob apprend le C

Message par maximus Mar 22 Déc 2015 - 17:04

Bonjour à vous les maîtres du C Very Happy

Je vais essayer de lâcher le BASIC au profit du C, je dis bien je vais essayer, pas sûr que j'aboutisse
Aussi merci par avance de pardonner mes questions qui pourront vous paraître, ... BASIC Razz

Je suis dans le site openclassrooms (ex siteduzéro) qui propose des cours pour débutants, et si le début est assez simple, je bute sur le cours des chaines de caractères, il faut dire que par rapport au BASIC ou au PASCAL, c'est pas de la tarte Suspect

J'essaie d'afficher les lettres en utilisant le code ASCII, ça marche bien avec une lettre unique, comme 65 qui affiche A, mais avec une boucle j'arrive à rien, il affiche tj le même caractère, qqu'un voit il mon erreur ?

Voila le screen de la console (codeblocks)

maxiNoob apprend le C Consol10

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char lettre = 65;
    printf("lettre: %c \n",lettre);
    printf("code ASCII: %d \n",lettre);
    char nom[]="Denis", chaine[6];
    printf("%s \n",nom);
    char i=0;
    do
    {
        i+=1;
        printf("%d : %c / ",i);
    }while (i<66);

    chaine[0] = 'S';
    chaine[1] = 'a';
    chaine[2] = 'l';
    chaine[3] = 'u';
    chaine[4] = 't';
    chaine[5] = '\0';
    printf("%s \n",chaine);
    return 0;
}
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Symoon Mar 22 Déc 2015 - 19:42

Je dirais ici (mais je suis très rouillé en C) :

printf("%d : %c / ",i);

==> tu demandes à afficher deux variables (%d et %c), mais tu n'en listes qu'une seule après (i)
Symoon
Symoon

Messages : 779
Date d'inscription : 26/04/2014

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Mar 22 Déc 2015 - 20:45

Trop fort !! Very Happy

effectivement avec 2 variables ça marche clown

maxiNoob apprend le C Consol11

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char lettre = 65;
    printf("lettre: %c \n",lettre);
    printf("code ASCII: %d \n",lettre);
    char nom[]="Denis";
    printf("%s \n",nom);
    char i=64;
    do
    {
        i+=1;
        printf("%d : %c / ",i,i);
    }while (i<122);

   
    return 0;
}
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Mer 23 Déc 2015 - 9:34

Bon je suis toujours dans les premiers cours que je triture et où je me mélange un peu les pinceaux avec une syntaxe un peu énigmatique, mais surtout j'entrevoie le principe des pointeurs enfin il me semble, dites moi si je me trompe:

les fonctions en C sont évidemment puissantes, mais elles ont un énorme défaut c'est qu'elles travaillent avec des copies des variables, ce qui ne permet pas de les modifier aisément, donc si je comprends bien les pointeurs, en utilisant l'adresse des variables on peut du coup les modifier directement en supprimant ces copies ? c'est ça ?
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Arnoric Mer 23 Déc 2015 - 11:09

Utiliser les pointeurs en argument de fonction a deux avantages.

Voici un exemple de fonction qui cherche à remplacer un élément dans une structure :
Code:
SBigData findAndReplaceElement(SBigData pListOfElements, SSmallElement pElement);

- Dans ce cas on utilise une copie de la structure en argument, si la structure fait plusieurs kilo-octets tu images le gaspillage de mémoire et de temps processeur pour la dupliquer.
D'ailleurs certains compilateurs, par défaut, indiquent une erreur de compilation.

- Second problème, si tu veux modifier la structure source tu es à nouveau obligé de retourner une copie de la structure

Voici une bonne fonction :
Code:
int findAndReplaceElement(SBigData* pListOfElements, SSmallElement* pElement);

- L'argument est un pointeur, il ne fait que 4 octets (sur un système 32bits) et tu peux directement modifier son contenu.
- En retour de fonction tu peux utiliser le int par exemple indiquer le nombre d'éléments modifiés.

Mais l'utilisation des pointeurs n'est pas toujours indispensable:

Code:
char Addition(char a, char b)
{
   return a + b;
}

Dans ce cas utiliser des pointeurs n'a aucun intérêt, un char fait un octet (contre 4 pour un pointeur) et on a pas besoin de modifier les valeurs d'origine.
Arnoric
Arnoric

Messages : 4
Date d'inscription : 15/06/2014
Age : 48

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par didierv Jeu 24 Déc 2015 - 13:36

Raah, j'ai mal à la tete rien qu'à penser aux pointeurs en C.
Courage Maximus. Tu utilises quel outil de programmation : OSDK ou CC65 ?

_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
didierv
didierv

Messages : 810
Date d'inscription : 19/01/2014
Age : 61
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Ven 25 Déc 2015 - 9:23

Merci Arno pour ton exemple
Didier > commençons pas le B A BA, j'utilise codeblocks
_____________________________

j'ai laissé le cours de coté pour faire des exercices et franchement c'est dur de dur, en plus j'ai parfois des plantages du programme sans un indice sur sa cause, pas de message d'erreur Suspect

Je m'exerce à la gestion des chaines de caractères et là le prog plante au 2e appel de la fonction de saisie, comme on ne peut pas réaffecter une chaine de caractère, je bidouille, c'est surement pas la bonne façon de faire, mais tout ça me sert à apprendre les bases et à mémoriser cette syntaxe barbare.



Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void saisieMot(char text[], char question[]);// fonction de saisie d'un mot

int main()
{

    char text[20], question[20], chaine[100];
    char question1[]="nom", question2[]="prenom";// items du formulaire
    strcpy(question, question1);
    saisieMot(text,question);
    sprintf(chaine,"tu t'appelles %s \n",text);// fonction d'écriture dans une chaine
    printf("%s\n\n",chaine);
    printf("la chaine a une longueur de %d caracteres\n\n", strlen(chaine));// fonction longueur de la chaine

    strcpy(question, question2);// ça buggue ici je pense
    saisieMot(text,question);
    sprintf(chaine,"tu t'appelles %s \n",text);// fonction d'écriture dans une chaine
    return 0;
}



void saisieMot(char text[], char question[])
{
    printf("Veuillez saisir votre %s: ",question);
    scanf("%s", text);
}


est ce un souci avec la taille du tableau text[]  ?

ça rend fou au début non ? tiens voila l'effet "C"  :  Laughing

maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par didierv Sam 26 Déc 2015 - 7:52

Bonjour Maximus,

J'ai réouvert codeblocks et ... n'ai pas trouve de bug dans ton programme. Ci-dessous la recopie avec 2/3 lignes supplémentaires pour réafficher le prénom.
RAS.

Code:

int main()
{

    char text[20], question[20], chaine[100];
    char question1[]="nom", question2[]="prenom";// items du formulaire
    strcpy(question, question1);
    saisieMot(text,question);
    sprintf(chaine,"tu t'appelles %s \n",text);// fonction d'écriture dans une chaine
    printf("%s\n\n",chaine);
    printf("la chaine a une longueur de %d caracteres\n\n", strlen(chaine));// fonction longueur de la chaine

    strcpy(question, question2);// ça buggue ici je pense
    saisieMot(text,question);
    sprintf(chaine,"tu t'appelles %s \n",text);// fonction d'écriture dans une chaine
    printf("%s\n\n",chaine);
    printf("la chaine a une longueur de %d caracteres\n\n", strlen(chaine));// fonction longueur de la chaine

    return 0;
}

_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
didierv
didierv

Messages : 810
Date d'inscription : 19/01/2014
Age : 61
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Sam 26 Déc 2015 - 13:22

c'est vraiment une gymnastique que de ne pas utiliser directement les variables et de devoir jongler avec des pointeurs, ces fonctions ne sont pas très pratiques , mais bon c'est un langage de bas niveau, ce qui veut dire qu'il faut être d'un haut niveau pour le maitriser. Je pense finir le tuto pour avoir une culture et une compréhension de vos codes, mais je pense pas être capable d'écrire Tyrann4 avec, ou dans 1 an ou 2, le temps de passer par toutes les étapes d'apprentissage du langage Embarassed
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par didierv Dim 27 Déc 2015 - 3:22

maximus a écrit:je pense pas être capable d'écrire Tyrann4

Courage Maximus,

Perso, je n'ai jamais trop utilisé ces instructions d'extension du c.
Je prends OSDK, j'utilise le C pour la structure générale de mon programme et toutes les e/s de l'oric sont gérées directement avec mes routines. C'est vrai que c'est du travail mais cela est plus fiable que de prendre le C pour générer un programme Oric.

_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
didierv
didierv

Messages : 810
Date d'inscription : 19/01/2014
Age : 61
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Dim 27 Déc 2015 - 14:37

voilà ma méthode, je lis le tutoriel en prenant en note les fonctions, puis je fais qq exercices, là j'en suis aux structures de variables, ça c'est balèze Very Happy sauf que pour initialiser un tableau de structure je suis comment dire ... largué Suspect clown

mon petit header
Code:
#define NB_PERSO 6

typedef struct Hero Hero;  // creation du type Hero
struct Hero
{
    char name[20];
    int  race;
    int  pvi;
    int  strength;
};

mon code source
Code:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"


int main()
{
    Hero perso[NB_PERSO-1]; // création d'une variable perso, tableau de 6
    int i=0;
    for (i=0; i<NB_PERSO-1; i++)  // Initialisation (foireuse)
    {
      perso[i].name = "inconnu";
      perso[i].race = 0;
      perso[i].pvi = 0;
      perso[i].strength = 0;
    }

    for (i=0; i<6; i++)
    {
        printf(" nom du hero %d : %s \n",i, perso[i].name);

        /*printf("veuillez saisir le nom du hero %s: ",i+1);
        scanf("%s",perso[i].name);*/
    }
    return 0;
}

quand je saurai faire ça je dois le faire dans une fonction avec pointeurs pale pale
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Godzil Dim 27 Déc 2015 - 18:33

Maximus: ton application ne plante pas, par contre si tu t'attends que

   sprintf(chaine,"tu t'appelles %s \n",text);// fonction d'écriture dans une chaine

affiche quelque chose, c'est que tu as oublié quelque chose Smile

Conseil, des parametres type

char toto[]

sont plutot à bannir, utilise

char *toto

Même si ça peut paraître bizarre, il est préférable de dire que c'est un pointeur qu'une table de taille indéterminé, ça ne change rien à la façon d'appeler la fonction, mais ça peut changer certains points d'optimisation, surtout sur un compilateur de mauvaise qualité.


Ensuite

   sprintf(chaine,"tu t'appelles %s \n",text);// fonction d'écriture dans une chaine
   printf("%s\n\n",chaine);

N'a aucun sens, enfin ça ne sert à rien, et le pire, c'est que tu affiches 3 retours à la ligne avec ton code, je suis pas sur que ça soit très utile Very Happy

Pourquoi ne pas directement appeler

   printf("tu t'appelles %s \n",text);
?
Déjà tu économises une variable (chaine) et aussi du temps de calcul (une seule fonction appelée plutôt que 2)



Après pour ton problème de remplissage de structure,

xxx.yyy = "";

est invalide en C.

En C99 minimum tu peux utiliser cette fonctionalité pour remplir une structure avec des valeurs par défaut:

Code:
typedef struct Hero Hero;  // creation du type Hero
struct Hero
{
    char name[20];
    int  race;
    int  pvi;
    int  strength;
};

Hero perso[NB_PERSO] = {
  {
     .name = "inconnu";
     .race = 0;
     .pvi = 0;
     .strength = 0;
  },
[...]
};

Et si vraiment il faut le faire au runtime, je conseillerais cette méthode (la plus rapide):

Code:

void init(void)
{
   Hero perso[NB_PERSO];
   Hero defaultValue = {
     .name = "inconnu";
     .race = 0;
     .pvi = 0;
     .strength = 0;
   }
   int i;

   for(i = 0; i < NB_PERSO; i++)
   {
      memcpy(&(perso[i]), &defaultValue, sizeof(Hero));
   }
};

Attention initialiser la table à NB_PERSO - 1, si tu as NB_PERSO étant égal à 10, ta table va être de 9 positions, et non 10. Seul l'indexation est à partir de 0, la création est le nombre d'entrée dans la table, donc si tu en veux 10 il faut mettre 10 et non 9.

Autre possibilité pour ta table de perso, rajouter un champ "valide", ou 0 est in perso invalide, autre que 1 un perso valide, l'initialisation du tableau se fait d'une manière encore plus simple:

  memset(&perso[0], 0, sizeof(Hero) * NB_PERSO);

Ce qui va remplir la zone mémoire correspondante à ton tableau d'octet 0, soit tout, en gros tout mettre à zéro.
Godzil
Godzil

Messages : 107
Date d'inscription : 20/01/2013
Age : 42
Localisation : Entre France et UK

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Lun 28 Déc 2015 - 11:26

merci godzil d'une réponse aussi détaillée, il va me falloir la semaine (de vacances) pour intégrer tout ça, c'est quand même hyper plus complexe que mon petit BASIC Suspect clown
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Admin Mar 29 Déc 2015 - 13:24

argh j'essaie ta méthode avec une fonction:

Code:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

void init(void);

int main()
{
    Hero perso[NB_PERSO];
    init();
    int i=0;
    for (i=0; i<NB_PERSO; i++)
     {
      printf(" nom du hero %d : %s \n",i, perso[i].name);
     }
    return 0;
}


    void init(void)
    {
       Hero perso[NB_PERSO];
       Hero defaultValue =
        {
         .name = "inconnu";
         .race = 0;
         .pvi = 0;
         .strength = 0;
        }
       int i;
       for(i = 0; i < NB_PERSO; i++)
       {
          memcpy(&(perso[i]), &defaultValue, sizeof(Hero));
       }
    };

ça marche pas je prends ça en messages d'erreur:

maxiNoob apprend le C Log_c10

_________________

Admin
Admin
Admin

Messages : 106
Date d'inscription : 02/12/2012

https://oric.forumactif.org

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par iss Mar 29 Déc 2015 - 15:03

Here is one 'correct' version of your code with some comments.
Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* this code can be moved to 'main.h' */
/* -- begin 'main.h' */
#define NB_PERSO 10

typedef struct Hero Hero;  // creation du type Hero
struct Hero
{
  char name[20];
  int  race;
  int  pvi;
  int  strength;
};
/* -- end 'main.h' */

void init(void);

Hero perso[NB_PERSO]; /* this is global variable */

int main(void)
{
  int i=0; /* i can be uninitialized here */

  init();

  for (i=0; i<NB_PERSO; i++)
  { /* if there is only one line you don't need brackets */
    printf(" nom du hero %d : %s \n",i, perso[i].name);
  }
  return 0;
}


void init(void)
{
  int i;

  Hero defaultValue =
  {
    .name = "inconnu", /* correct is ',' (not ';') */
    .race = 0,
    .pvi = 0,
    .strength = 0
  }; /* this ';' is obligatory */

  for(i = 0; i < NB_PERSO; i++)
  {
    memcpy(&(perso[i]), &defaultValue, sizeof(Hero));
  }
} /* ';' here are not needed */

Additionally: '//' is C++ to-end-of-line comment, for C comments are: /* .... */, although '//' works too ; )
iss
iss

Messages : 112
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Mar 29 Déc 2015 - 21:06

merci les gars de m'aider, le démarrage c'est toujours le plus ardu, et puis cette ponctuation elle est terrible Evil or Very Mad

ISS ton cade a fonctionné mais la compilation a bien duré 2 minutes Question Question Suspect Suspect
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par iss Mar 29 Déc 2015 - 21:20

WOW, 2 min?!?
I see you are using Code:Blocks IDE (good!) but what compiler?
By me it needs <5 sec with mingw32-gcc.

And this is gcc under Linux:

$ time gcc -o test test.c

real    0m0.050s
user    0m0.039s
sys     0m0.006s

And the running program:
$ ./test
nom du hero 0 : inconnu
nom du hero 1 : inconnu
nom du hero 2 : inconnu
nom du hero 3 : inconnu
nom du hero 4 : inconnu
nom du hero 5 : inconnu
nom du hero 6 : inconnu
nom du hero 7 : inconnu
nom du hero 8 : inconnu
nom du hero 9 : inconnu
Fichiers joints
maxiNoob apprend le C Download?action=showthumb&id=136
CB.jpg (13 Ko) Téléchargé 200 fois
iss
iss

Messages : 112
Date d'inscription : 30/10/2014

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Mar 29 Déc 2015 - 21:43

ha ben là ça remarche en 2 secondes Suspect p-e que mon windows était ralenti ou l'antivirus parfois me bloque, en tout as merci, il me reste à cogiter des structures à jongler avec pour bien les comprendre et les mémoriser

Sinon dans le tutoriel que je suis, il est interdit d'utiliser les variables globales, on doit utiliser fonctions et pointeurs Wink
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Godzil Mer 30 Déc 2015 - 1:26

Alors les site/tuto qui disent "les variable globale ou les goto" sont a bannir sont de mauvais tuto.

Les variables globales et les gotos ont des utilisations, il ne faut pas en abuser, et ne pas utiliser une variable globale comme simple parametre d'une fonction, mais il ne faut pas non plus tomber dans l'absurdité ou par exemple la carte d'un jeu est passé en parametre a toutes les fonctions, la on est dans le cas ou une variable globale est bien plus interessantes.

Le goto par exemple est tres utile pour n'avoir qu'un seul point de sortir sur une fonction (et facillite le tracage de fonction, entre autres)

Sinon conseil, non ordre! Very Happy
Quand ton compilateur te sors une longue liste d'erreur TOUJOURS commencer par la premiere erreur/warning, et une fois corrigé, relancer la compilation, et ainsi de suite.

Une erreur dans la liste peux etre due a des erreurs précédentes dans le code, donc pour eviter de passer des heures a tenter de corriger un truc inutile.. Smile

Autre chose important, un warning, meme si il n'empeche pas la compilation est signe qu'il y a potentiellement un probleme, et dans une grosse majorité des cas, un warning est a corriger.

Il est souvent bon d'activer l'option traiter un warning comme une erreur (-Werror) en ligne de commande, -Wall (tous les warnings) est aussi intéressant dans pas mal de cas, en fait pas mal de bugs a l'execution sont due a des warning ignorées.
Godzil
Godzil

Messages : 107
Date d'inscription : 20/01/2013
Age : 42
Localisation : Entre France et UK

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par maximus Jeu 31 Déc 2015 - 10:09

c'est Openclassroom, c'est pour les débutants en C, je pense qu'ils veulent nous inculquer les bases

Bon un peu de repos, plus de C jusqu'à l'année prochaine Laughing

Merci de vos conseils Wink

A+
maximus
maximus

Messages : 1274
Date d'inscription : 02/12/2012
Age : 63
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Hialmar Mer 6 Jan 2016 - 22:28

Je plussoie Godzil, sur un Oric, avec le peu de mémoire qu'on a il faut absolument utiliser des variables globales et même probablement des goto.

Ca permet d'économiser un max de RAM.

Par contre, pour l'initialisation des structures je pense que ça ne marchera pas ni avec OSDK ni avec LCC65.

Il faut faire à la main, variable par variable.

J'en profite pour souhaiter la bonne année à tout le monde.

Désolé mais j'ai déménagé pendant les vacances et n'ai pas pu suivre le forum.

_________________
Hialmar
Membre du CEO et de Silicium.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Godzil Mer 6 Jan 2016 - 23:53

Ha mais je n'ai jamais dit que l'init des structure tel que la version utilisant le C99 etait compatible avec OSDK/CC65.
J'ai bien dit "C99"

Mais meme, il est préférable d'initialiser une structure statiquement, que dynamiquement, autant que possible bien sur, enfin apres c'est un compromis mémoire/temps d'execution.
Godzil
Godzil

Messages : 107
Date d'inscription : 20/01/2013
Age : 42
Localisation : Entre France et UK

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Hialmar Jeu 7 Jan 2016 - 8:55

Oui je sais que tu l'as dit mais je pense que C99 c'est un peu du grec pour les non informaticiens donc je préfère insister dessus sachant qu'on est qu'en même sur un forum Oric et que le but ultime de Maximus est de faire Tyrann 4 pour Oric.

Je suis aussi à fond pour les initialisations statiques. Mais avec les compilos pour Oric il faut gérer les inits à l'ancienne comme ça :
Code:

#include <lib.h>

#define NB_PERSO 3

typedef struct Hero Hero;  // creation du type Hero
struct Hero
{
    char name[20];
    int  race;
    int  pvi;
    int  strength;
};

Hero perso[NB_PERSO] = {
  {"inconnu",0,0,0},
  {"inconnu",0,0,0},
  {"inconnu",0,0,0}
};

void main()
{
   int i;
   printf("Hello World !\n");
   
   for(i=0; i<NB_PERSO; i++) {
      printf("Nom : %s, Race : %d, Vie : %d, Force : %d\n", perso[i].name, perso[i].race, perso[i].pvi, perso[i].strength);
   }
}

J'ai testé sur OSDK et ça marche sans pb.

Maximus, je te conseille rapidement de passer à OSDK pour ne pas prendre d'habitudes sur des trucs qui ne sont pas compatibles.

_________________
Hialmar
Membre du CEO et de Silicium.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Godzil Jeu 7 Jan 2016 - 12:59

Hum, a mon sense il est plus simple d'appresndre avec un compilo qui ne fait pas des conneries 1 fois sur 2 Very Happy

OSDK fait des miracles de fournir du C pour l'Oric, mais il a quand meme pas mal de soucis pas tres amusant pour un débutant Very Happy
Godzil
Godzil

Messages : 107
Date d'inscription : 20/01/2013
Age : 42
Localisation : Entre France et UK

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par didierv Jeu 7 Jan 2016 - 13:36

Bonjour à tous

100 pour 100 d'accord avec Patrice. J'aurais fait pareil et cela est assez lisible je trouve.
je me demande juste quelquefois si je ne devrait pas tester cc65 qui permettrait en plus de coder sur Apple par exemple en même temps.

Là où je flanche mais je n'ai pas trop testé c'est dans l'utilisation de pointeurs.
Par exemple puis-je avoir :
_ ma structure du perso qui adresse $9000 zone de datas de mon programme et à d'autres moments je donne la même zone à une autre structure de données
_ ou vu différemment ; un programme noyau chargé de $1000 a $2000 et des modules programme A, B ... chargés en $2000 a tour de role qui adressent des structures stockées en $9000

je ne sais pas si je suis clair.
didier

_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
didierv
didierv

Messages : 810
Date d'inscription : 19/01/2014
Age : 61
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

maxiNoob apprend le C Empty Re: maxiNoob apprend le C

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivant

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum