Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/10/2007, à 20:46

RedCow

Petite question sur le scanf()

Coucou voici mon code :

#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
unsigned char nombre=0;
 
while (nombre != 8)
{
printf("Bonsoir !\nVeuillez saisir un nombre:");
scanf("%ld",&nombre);
printf("Ce nombre est %ld \n\n\n",nombre);
return 0;
}

Que mettre a la place de %ld vu que c'est un unsigned char?
Merci tongue

#2 Le 04/10/2007, à 21:03

stopher

Re : Petite question sur le scanf()

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

int main()
{
unsigned char nombre;

    while (nombre != 8)
    {
        printf("Bonsoir !\nVeuillez saisir un nombre:");
        scanf("%s",&nombre);
        printf("Ce nombre est %s \n\n\n",nombre);
    }
    return 0;

}

ca donne quoi ?

Dernière modification par stopher (Le 04/10/2007, à 21:21)

Hors ligne

#3 Le 04/10/2007, à 21:05

RedCow

Re : Petite question sur le scanf()

Cela veut dire que si je veux utiliser un entier je suis obligé de mettre int?

#4 Le 04/10/2007, à 21:22

stopher

Re : Petite question sur le scanf()

Ba c mieux qu'un char .. c'est plus adapté ...

J'ai quelque problemes avec anjuta ..  je ne peut pas tester en live ..

Hors ligne

#5 Le 04/10/2007, à 21:28

RedCow

Re : Petite question sur le scanf()

Mais cela prend beaucoups de mémoire non?

#6 Le 04/10/2007, à 21:35

stopher

Re : Petite question sur le scanf()

Ba en fait :

char : 8 bits
int : 16 bits

Apres .. quand tu dis beaucoup .. je pense que c'est dérisoire face aux machines de maintenant ...

Hors ligne

#7 Le 04/10/2007, à 21:38

best_friend_fr

Re : Petite question sur le scanf()

Salut

Non, tu peux mettre %c pour ton character.

Attention toutefois a deux choses :
1) dans ce cas, ton test devient nombre!='8'
2) Il faut que tu vides le buffer stdin apres chaque scanf, sinon, tu ves te retrouver avec 2 entrees, une pour ton chiffre, et une pour le retour a la ligne


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#8 Le 04/10/2007, à 21:39

best_friend_fr

Re : Petite question sur le scanf()

@stopher:
Ca devient rare les processeurs 16 bits maintenant smile
Donc le int est a 32 ou 64 bits suivant ton processeur.


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#9 Le 04/10/2007, à 21:47

best_friend_fr

Re : Petite question sur le scanf()

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

int main()
{
char nombre;
    while (nombre != '8')
    {
        printf("Bonsoir !\nVeuillez saisir un nombre:");
        scanf("%c",&nombre);
        getchar();
        printf("Ce nombre est %c \n\n\n",nombre);
    }
    return 0;

}

sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#10 Le 04/10/2007, à 21:51

stopher

Re : Petite question sur le scanf()

C'est pas faut .. lol ...

Pourtant je ne suis pas un vieux ... mes infos en prog C/C++ doivent trop dater ... tongue

Hors ligne

#11 Le 04/10/2007, à 22:08

telliam

Re : Petite question sur le scanf()

si tu veux absolument garder le char, je coderai :

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

int main()
{
char nombre;
    while (nombre != '8')
    {
        printf("Bonsoir !\nVeuillez saisir un nombre:");
        nombre = (char)getchar();
        printf("Ce nombre est %d \n\n\n",(int)nombre);
    }
    return 0;

}

si tu regardes la manpage du getchar, tu verras que :

fgetc() lit le caractère suivant depuis le flux stream  et
       renvoie  ce  caractère,  lu sous forme unsigned char, puis
       transformé en int, ou EOF en cas d'erreur  ou  de  fin  de
       fichier.

       getc()  est  équivalent  à  fgetc()  sauf  qu'il peut être
       implementé sous forme  de  macro,  qui  évalue  l'argument
       stream plusieurs fois.

       getchar() est équivalent à getc(stdin).

donc le cast de int vers char pour la valeur retourné par getchar n'est pas dangereuse.
De plus pour le printf, il vaut mieux metter un %d plutot qu'un %c car le %c va t'afficher un caractere et non un nombre.


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#12 Le 04/10/2007, à 22:09

RedCow

Re : Petite question sur le scanf()

Que signifie %c?

#13 Le 04/10/2007, à 22:11

best_friend_fr

Re : Petite question sur le scanf()

@Telliam

Toujours la meme remarque, il faut vider le buffer entre 2 lectures...
Sinon, tu obtiens ca

Bonsoir !
Veuillez saisir un nombre:1
Ce nombre est 49


Bonsoir !
Veuillez saisir un nombre:Ce nombre est 10


Bonsoir !
Veuillez saisir un nombre:2
Ce nombre est 50


Bonsoir !
Veuillez saisir un nombre:Ce nombre est 10


Bonsoir !
Veuillez saisir un nombre:3
Ce nombre est 51


Bonsoir !
Veuillez saisir un nombre:Ce nombre est 10


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#14 Le 04/10/2007, à 22:12

best_friend_fr

Re : Petite question sur le scanf()

%c est pour un char


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#15 Le 04/10/2007, à 22:14

telliam

Re : Petite question sur le scanf()

ok ok il manque un fflush wink


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#16 Le 04/10/2007, à 22:16

telliam

Re : Petite question sur le scanf()

d'un autre coté autant mettre un int et on est tranquille smile:) non?

Dernière modification par telliam (Le 04/10/2007, à 22:17)


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#17 Le 04/10/2007, à 22:18

best_friend_fr

Re : Petite question sur le scanf()

Ben oui, mais comme il dit, si il garde toutes les valeurs, au bout de 2 milliards de boucles, il devra commencer a swapper


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#18 Le 04/10/2007, à 22:24

telliam

Re : Petite question sur le scanf()

pour l'instant sa variable n'est pas stockée, ca vaut peut etre pas trop la peine de se casser la tete pour quelques octets?


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne