Code ascii en C

Fermé
valgoku Messages postés 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 - 28 nov. 2009 à 14:34
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 déc. 2009 à 23:18
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
A voir également:

5 réponses

the F Messages postés 150 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 22 mars 2011 13
28 nov. 2009 à 15:42
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 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 47
2 déc. 2009 à 21:17
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
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 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
2 déc. 2009 à 21:23
Bonjour

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

PS : La fin d'une chaine est défini par '\0'
0
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 400 Date d'inscription vendredi 2 octobre 2009 Statut Membre Dernière intervention 23 décembre 2009 71
2 déc. 2009 à 21:44
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 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 47
2 déc. 2009 à 22:57
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > valgoku Messages postés 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013
2 déc. 2009 à 22:59
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
2 déc. 2009 à 22:35
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 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 47
2 déc. 2009 à 22:59
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > valgoku Messages postés 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013
2 déc. 2009 à 23:18
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