Inscrivez-vous, c'est gratuit !

Langage C - probleme avec type char

Le Kit CommentCaMarche Kit CCM Téléchargez le contenu de CommentCaMarche, pour une consultation illimitée hors ligne.
Télécharger CommentCaMarche.kit v2.0.7
langage C - probleme avec type char
par Jackho03
 Fil de Discussions
Statut : Résolu
samedi 6 octobre 2007 à 21:14:02
Bonjour a tous,
je débute en C et je heurte malheureusement sur quelque chose de tres bete ....
Je voudrais réaliser un code qui récupere par "scanf" une chaine de caractere et apres je fais un test suivant le caractere entré.
Voici mon code :

#include <stdio.h>

int main( void ) {
char var;
int taille_entete_N2;
	printf("\n Choisissez Ethernet (E) ou FrameRelay (F)\n");
	scanf ("%c", &var);
	printf("chaine de caractere : %c",var);
	
	
	if (var = 'E')
	{
		taille_entete_N2 = 28;
	}
	
	if (var = 'F')
	{
		taille_entete_N2 = 6;
	}
	
	printf("\n taille : %d",taille_entete_N2);
	
}


Deja quand je rentre avec le scan f la chaine de caractere il ne me prend en compte qu'un seul caractere (le premier). J'ai essayé de remplacer %c par %s mais la le programme ne fonctionne pas!!
Quand je fais le printf pour afficher ce qui est dans la variable "var" il m'affiche la bonne lettre de la chaine de caractere precedemment entrée. Mais au niveau du test if meme si cette lettre est un 'F' dans la variable taille_entete_N2 il m'affichera 28 !

Exemple de ce que ca m'affiche quand je compile :

Choisissez Ethernet (E) ou FrameRelay (F)
Ethernet                  //correspond au scanf
chaine de caractere : E
taille : 6



Alors que normalement il aurait du etre affiché 28 et non 6 !!
Quelqu'un peut m'expliquer pourquoi j'ai autant de mal a faire quelque chose d'aussi simple :P

Bonne soirée a tous !
Configuration: Windows Vista
Firefox 2.0.0.7
21 message(s) posté(s) depuis le vendredi 9 février 2007
  Dernier Message    Autres messages de Jackho03    Signaler ce message aux modérateurs    Retour au thème du forum Forum programmation    
  Répondre à Jackho03 

1

  • Répondre à Jackho03

  • Ce message vous semble utile, votez !
  • Autres messages de Jackho03
  • Signaler ce message aux modérateurs
  • Revenir au forum Forum programmation
 Par Jackho03, le samedi 6 octobre 2007 à 21:26:20 Fil de Discussions
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 :

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

Merci21 message(s) posté(s) depuis le vendredi 9 février 2007
 
  Continuer la discussion    

2

  • Répondre à lami20j

  • Ce message vous semble utile, votez !
  • Autres messages de lami20j
  • Signaler ce message aux modérateurs
  • Revenir au forum Forum programmation
 Par lami20j, le samedi 6 octobre 2007 à 22:46:48 Fil de Discussions
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;
}

lami20j8534 message(s) posté(s) depuis le dimanche 14 novembre 2004
c'est sympa d'être important, mais c'est plus important d'être sympa.
 
  Continuer la discussion    

3

  • Répondre à mamiemando

  • Ce message vous semble utile, votez !
  • Autres messages de mamiemando
  • Signaler ce message aux modérateurs
  • Revenir au forum Forum programmation
 Par mamiemando, le dimanche 7 octobre 2007 à 01:48:06 Fil de Discussions
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)
#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 chance7512 message(s) posté(s) depuis le jeudi 12 mai 2005
 
  Continuer la discussion    

4

  • Répondre à Jackho03

  • Ce message vous semble utile, votez !
  • Autres messages de Jackho03
  • Signaler ce message aux modérateurs
  • Revenir au forum Forum programmation
 Par Jackho03, le dimanche 7 octobre 2007 à 13:55:13 Fil de Discussions
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
 
  Continuer la discussion    

5

  • Répondre à lami20j

  • Ce message vous semble utile, votez !
  • Autres messages de lami20j
  • Signaler ce message aux modérateurs
  • Revenir au forum Forum programmation
 Par lami20j, le dimanche 7 octobre 2007 à 14:05:15 Fil de Discussions 
==> 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à
#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.
lami20j8534 message(s) posté(s) depuis le dimanche 14 novembre 2004
c'est sympa d'être important, mais c'est plus important d'être sympa.
 
  Continuer la discussion    
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide

Discussions pertinentes trouvées dans le forum
16/04 19h26 Mise en page en Langage C Programmation 19/04 18h047
01/04 16h29 Modification d'un champs en langage C Programmation 07/04 21h026
05/03 19h08 structure en langage C Programmation 05/03 19h561
15/07 22h05 [langage C] char tout simple svp... Programmation 15/07 23h081
22/08 10h35 [C] Type Byte? Programmation 22/08 17h184
30/03 09h35 Langage C pointeurs, creation de liste. Programmation 08/04 00h3412
02/06 15h16 [C] int <--> char Programmation 02/06 16h146
30/12 17h09 En language C : probleme de return de valeur Programmation 30/03 17h276
22/01 11h34 [langage C] probleme sur allocation memoire Programmation 09/02 14h243
14/03 12h37 [langage C] : projet à réaliser Programmation 03/09 13h443
Plus de discussions sur « langage C probleme avec type char » Discussion en cours Discussion fermée Problème résolu
Logiciels pertinents trouvés dans les téléchargements
 Dev-C++ - Dev-C++ est un environnement de développement intégré (IDE) en C/C++. Son compilateur est basé sur Mingw de GCC, mais il... Catégorie: C/C++
Licence: Freeware/gratuit
Télécharger Visual Basic Express 2005Visual Basic Express - Le langage de programmation Visual Basic est historiquement dans les gènes de la société Microsoft. Avec plus de 30.000... Catégorie: Visual Basic
Licence: Freeware/gratuit
Télécharger TYPSoft FTP Serveur  0.98.6TYPSoft FTP Serveur - TYPSoft FTP Serveur est un ftp serveur rapide et facile avec le support des commandes Standard de FTP, Interface propre et... Catégorie: FTP
Licence: Freeware/gratuit
Télécharger DS Monkey Audio - Filtre APE 1.00DS Monkey Audio - Filtre APE - Le format MonkeysAudio (extension *.ape) est un format de compression audio lossless (sans pertes) permettant de réduire la... Catégorie: Plugins audio
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « langage C probleme avec type char »