1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mars 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2018
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Compilation pour affichage d'un caractère

    Bonjour Tout le monde, je viens de rentrer dans le monde du Dev, j'ai acheté mes premières lunettes pour ressembler à un vrai de vrai. Bref, je vous expose un problème simple pour vous les expérimentés.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int	my_isneg(int);
    char	my_putchar(char);
     
    int	main()
     
    {
    	my_putchar('50 + my_isneg(45)');
    	my_putchar('k');
    	my_putchar('\n');
     
     
    }

    Je veux que le return de my_isneg s'ajoute à 50 pour m'afficher le ASCII.
    Pour esasyer de contourner le problème ,

    J'ai essayer d'initialiser une variable par exemple : int e;
    e = my_isneg(-99);


    Mon GCC ne veut pas compiler mes deux solutions ... Vous voyez un souci ?



    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 479
    Points : 5 656
    Points
    5 656

    Par défaut

    , balise qui se trouve au milieu tout à droite (#)

    Citation Envoyé par Safffffia Voir le message
    Bonjour Tout le monde, je viens de rentrer dans le monde du Dev,
    Et tu commences par du C : tu vas le sentir passer fortement ou

    Et d'ailleurs ton erreur c'est une erreur pure C
    • Une variable de type char c'est 1 seul caractère
    • En C, on utilise la simple quote pour 1 seul caractère et les doubles quotes pour les chaînes de caractères.
    • Le type pour une chaîne de caractères c'est char *. Donc cela veut dire allocation avec calcul de la place + le caractère final \0 et désallocation
    • On ne peut pas concaténer en C avec un '+'. Il faut créer une chaîne résultat (avec calcul de la place + le caractère final \0) et faire les 2 copies. Donc cela veut dire allocation et désallocation.
    • On peut créer une chaîne de caractères statique. Mais pour des données qu'on récupère, manipule, stocke, ..., il faut calculer la taille, allouer, désallouer.
    • (en prévision) Toutes les chaînes de caractères en C ont pour caractère final \0
    • (en prévision) Le passage de paramètres est par valeur
    • (en prévision) Même si un char est simplement un entier sur 1 octet, c'est le type pour les caractères. On n'utilise pas un autre type. Et pour l'Unicode il existe le type wchar_t


    Tu as les fonctions standards pour t'aider memset, memcpy (<- liens)


    Et ta signature de ton main est fausse c'est int main(int argc, char* argv[]) {.

    Édit : Merci à jlliagre , puisque argv est la liste des arguments

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 763
    Points : 3 807
    Points
    3 807

    Par défaut

    Bonjour,

    Entre les apostrophes on doit mettre un unique caractère. Ce qui est obtenu c'est un nombre qui correspond au code ASCII du caractère. Pour avoir le caractère lui-même, il suffit de mettre cette valeur dans un char.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int ix = 'A';  // ix est un entier qui vaut le code ASCII du caractère A, soit la valeur 65.
    char cy = 'A'; // cy est le caractère A (affiché comme un nombre il vaut aussi 65)
    printf( "Le caractère est %c" , cy );  // %c pour afficher comme un caractère
    printf( "Le code ASCII est %d" , ix ); // %d pour le nombre entier
    int iz = '\n';  // attention, la notation \n est un simple caractère (qui a le code ASCII 13), il correspond au retour à la ligne
    // pour convertir un caractère en sa valeur ASCII, un simple égal fonctionne en C. C'est finalement la même chose.
    cy = iz;
    iz = cy;

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    juin 2007
    Messages
    2 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2007
    Messages : 2 693
    Points : 7 853
    Points
    7 853

    Par défaut

    Citation Envoyé par foetus Voir le message
    Et ta signature de ton main est fausse c'est int main(int argc, char* argv) {
    Perdu

    Les signatures standard pour main depuis le C 99 sont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char *argv[])
    ou l'équivalent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char *argv[])
    ou, si les arguments sont inutilisés:

    On rencontre aussi, en particulier sur les systèmes Unix/Linux, l'extension décrite dans le standard et très répandue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char *argv[], char *envp[])
    int main() est quasiment équivalent à int main(void).
    ɹǝsn *sıɹɐlos*

Discussions similaires

  1. [AC-2007] Problème bête dans access
    Par rached2005 dans le forum Access
    Réponses: 4
    Dernier message: 12/03/2013, 12h22
  2. Problème bête sur formule
    Par Nanais19 dans le forum Excel
    Réponses: 3
    Dernier message: 04/10/2011, 13h35
  3. [J2SE] Problème bête
    Par Soronite dans le forum Général Java
    Réponses: 4
    Dernier message: 06/02/2009, 10h55
  4. Problème bête char*
    Par PP(Team) dans le forum C
    Réponses: 20
    Dernier message: 17/09/2008, 23h29
  5. [C#] Problème bête avec le combo
    Par irnbru dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/03/2006, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo