Code ascii en C

valgoku Messages postés 213 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,

J'aimerai tout simplement savoir quoi mettre pour pouvoir lire un blanc dans une réponse;

par ex:

char nombre;
int nb;
printf("donner un nombre\"n);
scanf("%c",&nombre); // oui je lis chaque lettre ^^
while(nombre != "") <------ la est mon pb;
etc

j'aimerai que le compil sache que par exemple quand je tappe 174 et que j'arrete apres le 4, il reconnaisse un blanc, ou "rien" et me finisse mon prgramme.

Quand j'essay comme ca le compil me dit que je peux pas convertir un char en int mais moi je veux lire chaque caractere....
Je pensais au caractere ascii du "blanc" mais je ne sais pas comment l'utiliser...

J'espere que vous m'aurez compris... :)

Help à mort ^^

Thx

5 réponses

the F Messages postés 162 Statut Membre 13
 
Salut
Tout d'abord un caractere vide est representé par un rien pas un blanc (espace) c à d : '' -une seule cote celle du bouton 4 sur un clavier azerty .
alors , ton bout de code devient :
*********
char nombre;
int nb;
do {
      printf("donner un nombre\"n);
      scanf("%c",&nombre); 
}while(nombre != '');  // Notez la correction 

*******************
remarque : ce code ne te laisse dans le caractere nombre que la derniere valeur saisie ,si ca ce que tu veux vas y
0
valgoku Messages postés 213 Statut Membre 47
 
Merci, mais j'ai toujours le meme probleme.

Il me dit : error C2137: constante caractere vide

Voilà mon code :

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

int main(){
int j=0;
char lect;

printf("veuillez donner un chiffre\n");
scanf("%c",&lect);
do{
if(lect>='a' && lect<='z' || lect>='A' && lect<='Z'){
printf("Chiffres svp\n");
fflush(stdin);
scanf("%c",&lect);
}
else{
j=j*10+lect-'0';
scanf("%c",&lect);
}
}while(lect!= '');
printf("voila le chiffre : %d\n",j);
system("pause");
}

Where is the mistake ?
0
le père
 
Bonjour

constante caractère vide = deux apostrophes sans caractère entre les deux
while(lect!= '');
Il FAUT ajouter un espace. C'est cet espace que tu compares avec lect
0
Pilow Messages postés 410 Statut Membre 71
 
Bonjour

While (tructruc != '')
revient a
while (tructruc)
non ?

PS : La fin d'une chaine est défini par '\0'
0
le père
 
Bonjour

Non, While (tructruc != '') ne revient pas à while (tructruc).
Car While (tructruc != '') est une erreur de syntaxe alors que while (tructruc) est correct.
while (tructruc) est équivalent à while (tructruc!=0) ou while (tructruc!='\0')
0
Pilow Messages postés 410 Statut Membre 71
 
j'aimerai que le compil sache que par exemple quand je tappe 174 et que j'arrete apres le 4, il reconnaisse un blanc, ou "rien" et me finisse mon programme.

Autant pour moi, je m'etais surtout concentré sur cette phrase et j'avais retenu qu'il cherchait la 'fin de chaine'
0
valgoku Messages postés 213 Statut Membre 47
 
euhhhh je pense avoir trouvé :)

il faut tout simplement mettre, enfin pour ma part ca marche : while (tructruc != '\');

Dites moi ce que vous en pensez !
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > valgoku Messages postés 213 Statut Membre
 
C'est pas '\' mais '\n' que tu voulais dire. Et c'est ce que j'ai dit dans mon message 7 ;-))).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
Attention dans ton programme, tu mets '' au lieu de ' '. Il ne faut pas oublier l'espace à l'intérieur des deux crochets (et non guillemets).

Ensuite, pas de fflush(stdin); Ce n'est pas correct. On vide le cache à la main.

Je suis pas sûr d'avoir compris ta condition d'arrêt. Si tu veux qu'en tapant 145 il s'arrête. La condition d'arrêt sera bêtement : lettre!='\n'. Et dans ce cas, il ne faut pas vider le cache.

Sinon, au cas où, sache qu'il existe strtol qui fait ce que tu fais. Mais bon, ce que tu fais c'est un bon exercice d'entraînement. Par contre, tu peux l'améliorer encore en efficacité.

Cdlt
0
valgoku Messages postés 213 Statut Membre 47
 
J'ai rafraichi ma page trop tard ^^

Oui le \n marche !

Pour les fflush(stdin) oui je m'en doutais mais bon, je voulais un avis plus avisé.

Ensuite pour le stdtol je ne connais pas cela. Tu l'utlises comment ?
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > valgoku Messages postés 213 Statut Membre
 
Il s'agit de strtol et non stdol.
Voici un petit lien qui t'explique cela : http://fr.wikiversity.org/wiki/Langage_C/Fonctions_de_base/stdlib.h
Cela va certes te paraître compliqué, mais le C l'est. Si tu veux juste un code fonctionnel, tu peux en tirer la substantifique moelle : nombre=strtol(chaine, (char **) NULL, 10); //cela convertira en base 10.

Pour le fflush(stdin), le mieux est de faire une petite fonction contenant :
int c;
while((c=getchar())!='\n' && c!=EOF);

Cela videra le buffer clavier.

Cdlt
0