Langage C - probleme avec type char
Résolu/Fermé
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
-
6 oct. 2007 à 21:14
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 7 oct. 2007 à 14:05
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 7 oct. 2007 à 14:05
A voir également:
- Langage C - probleme avec type char
- Langage ascii - Guide
- Coco char - Accueil - Réseaux sociaux
- Langage binaire - Guide
- Clear type - Guide
- Pascal langage - Télécharger - Édition & Programmation
5 réponses
Jackho03
Messages postés
21
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
31 octobre 2007
6 oct. 2007 à 21:26
6 oct. 2007 à 21:26
C'est bon j'ai compris .... il suffisant de mettre == a cette endroit :
if (var = 'F')
donc ca devient
if (var == 'F')
assez stupide .....
Sinon j'ai un autre soucis :
Je veux donc l'afficher sous forme de tableau mais voici ce qu'il m'affiche :
Il me prend la derniere lettre du mot !
De plus si j'essaye de mettre le mot Ethernet a la place de Ethe donc :
char data[2][2] = {
{'A','Ethernet'},
{'B','FrameRelay'}
};
il me met une erreur "illegal caracter constant".
Que dois-je faire pour résoudre ces 2 problemes ???
Merci
if (var = 'F')
donc ca devient
if (var == 'F')
assez stupide .....
Sinon j'ai un autre soucis :
int main( void ) { char data[2][2] = { {'A','Ethe'}, {'B','Fram'} }; printf( "\t%c \t%c\n", data[0][0],data[0][1] ); printf( "\t%c \t%c\n", data[1][0],data[1][1] ); }
Je veux donc l'afficher sous forme de tableau mais voici ce qu'il m'affiche :
A e B m
Il me prend la derniere lettre du mot !
De plus si j'essaye de mettre le mot Ethernet a la place de Ethe donc :
char data[2][2] = {
{'A','Ethernet'},
{'B','FrameRelay'}
};
il me met une erreur "illegal caracter constant".
Que dois-je faire pour résoudre ces 2 problemes ???
Merci
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 oct. 2007 à 22:46
6 oct. 2007 à 22:46
Salut,
#include<stdio.h> int main (void) { char *data [4] = { "A", "Ethernet", "B", "Fram" }; printf ("\t%c \t%c\n", **data, **(data+1)); printf ("\t%c \t%c\n", **(data+2), **(data+3)); return 0; }
mamiemando
Messages postés
33334
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 novembre 2024
7 801
7 oct. 2007 à 01:48
7 oct. 2007 à 01:48
Il faut faire la distinction entre un char (un caractère) entre ' ' et un char * (qu'on va appeler chaîne de caractère) qui est entre " ". Ainsi il ne peut y avoir par définition qu'un seul caractère entre deux ' ' (ou une séquence particulière, genre \n, \t, \r qui sont des caractères spéciaux).
Ce que tu peux faire c'est une structure. Dès qu'une structure de donnée devient un peu compliquée c'est la bonne façon d'encapsuler l'information. Par exemple dans ton cas ta structure se compose de deux caractères ('A', 'B') qu'on va stocker dans les champs car1 et car2, et de deux chaînes ("Ethernet" et "FrameRelay") qu'on va stocker dans str1 et str2.
Je suppose dans le code suivant que tu connais les notions suivantes en C:
- les structures
- les allocations mémoire (malloc)
Sous linux quand tu compiles et exécute le programme ça donne donc :
Si tu as besoin de précisions n'hésite pas !
Bonne chance
Ce que tu peux faire c'est une structure. Dès qu'une structure de donnée devient un peu compliquée c'est la bonne façon d'encapsuler l'information. Par exemple dans ton cas ta structure se compose de deux caractères ('A', 'B') qu'on va stocker dans les champs car1 et car2, et de deux chaînes ("Ethernet" et "FrameRelay") qu'on va stocker dans str1 et str2.
Je suppose dans le code suivant que tu connais les notions suivantes en C:
- les structures
- les allocations mémoire (malloc)
#include <stdio.h> #include <string.h> #include <stdlib.h> // Une structure permet de regrouper un ensemble d'attribut // dans un même type. struct data_t{ char car1; char car2; char *str1; char *str2; }; // Cette fonction alloue en mémoire une structure data_t // et initialise ses attributs. Qui dit allocation (malloc) // dit désallocation (free) le jour où on aura plus besoin de // ce qu'on a créé en mémoire. Ce rôle sera assuré par la // fonction del_data struct data_t * new_data(char c1,char c2,const char *s1,const char *s2){ struct data_t *d = (struct data_t *)malloc(sizeof(struct data_t)); d->car1 = c1; d->car2 = c2; d->str1 = (char *)malloc(strlen(s1)); d->str2 = (char *)malloc(strlen(s2)); strcpy(d->str1,s1); strcpy(d->str2,s2); return d; } // Ecrit le contenu de la structure void write_data(const struct data_t *d){ printf("%c\t%s\n",d->car1,d->str1); printf("%c\t%s\n",d->car2,d->str2); } // Efface la structure de la mémoire void del_data(struct data_t * d){ free(d->str1); free(d->str2); free(d); } int main(){ struct data_t *d = new_data('A','B',"Ethernet","FrameRelay"); write_data(d); del_data(d); return 0; }
Sous linux quand tu compiles et exécute le programme ça donne donc :
(mando@aldur) (~) $ gcc -W -Wall plop.c (mando@aldur) (~) $ ./a.out A Ethernet B FrameRelay
Si tu as besoin de précisions n'hésite pas !
Bonne chance
Merci beaucoup pour vous réponses.
==> Lami20j : j'ai essayé mais pareil ca ne m'affiche que la premiere lettre du mot !
==> mamiemando : ca marche impec !
Va falloir que je me remette dans tout ce qui est structure et malloc :P
Donc en fait si je veux utiliser un tableau (pas une structure) il faudra que ce soit un tableau d'entier !
Mais si je souhaite y mettre des chaines de caracteres je dois passer par des structures !!
Enfin bref un grand grand MERCI !!
Ce que tu m'as écris là me servira beaucoup si je dois utiliser d'autres structures ! (tres bien commenté et clair !)
bonne journée a vous tous !
Jackho
==> Lami20j : j'ai essayé mais pareil ca ne m'affiche que la premiere lettre du mot !
==> mamiemando : ca marche impec !
Va falloir que je me remette dans tout ce qui est structure et malloc :P
Donc en fait si je veux utiliser un tableau (pas une structure) il faudra que ce soit un tableau d'entier !
Mais si je souhaite y mettre des chaines de caracteres je dois passer par des structures !!
Enfin bref un grand grand MERCI !!
Ce que tu m'as écris là me servira beaucoup si je dois utiliser d'autres structures ! (tres bien commenté et clair !)
bonne journée a vous tous !
Jackho
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
7 oct. 2007 à 14:05
7 oct. 2007 à 14:05
==> Lami20j : j'ai essayé mais pareil ca ne m'affiche que la premiere lettre du mot !
mais ce ça que je voulais ;-)
en revanche je ne savais pas ce que tu voulais.
c'est toi qui voulais un caractère \t%c\n"
Donc en fait si je veux utiliser un tableau (pas une structure) il faudra que ce soit un tableau d'entier !
pas obligé
Mais si je souhaite y mettre des chaines de caracteres je dois passer par des structures !!
Non
Et voilà
L'utilisation des champs est très pratique et la lisibilité de ton programme est meilleure.
mais ce ça que je voulais ;-)
en revanche je ne savais pas ce que tu voulais.
c'est toi qui voulais un caractère \t%c\n"
Donc en fait si je veux utiliser un tableau (pas une structure) il faudra que ce soit un tableau d'entier !
pas obligé
Mais si je souhaite y mettre des chaines de caracteres je dois passer par des structures !!
Non
Et voilà
#include<stdio.h> int main (void) { char *data[4] = { "A", "Ethernet", "B", "Fram" }; printf ("\t%c \t%s\n", **data, *(data + 1)); printf ("\t%c \t%s\n", **(data + 2), *(data + 3)); return 0; }L'utilisation des structues c'est en fonction des besoins.
L'utilisation des champs est très pratique et la lisibilité de ton programme est meilleure.