Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1213 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probléme de saisi de caractére !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probléme de saisi de caractére !!

n°1176989
hostile4
Posté le 16-08-2005 à 11:42:17  profilanswer
 

Bonjour , alors je suis un débutant dans le domaine de la programation , ainsi je me suis procuré un ouvrage sur le langage C.
Et sur l'un des 1er programmes je n'ai pas le résultat souhaité , alors que dans mon bouquin il m'explique que cela marche trés bien  :pt1cable: .
 
Voici le programme:
 
#include <stdio.h>
main()
{      char x;
       x=getc(stdin);
       printf("Le caractere saisi est: %c\n", x);
      return(0);
}
 
 
D'aprés mon livre donc , ce programme devrait me permettre d'afficher a l'écran le caractére que je tape au clavier , or lorsque j'exécute ce programme je peu tapé autant de lettre que je désire jamais la phrase "Le caractere saisi est:" ne s'affiche.
 
Alors j'aimerai savoir quel paramétre m'échappe svp ?
Merci d'avance

mood
Publicité
Posté le 16-08-2005 à 11:42:17  profilanswer
 

n°1177031
hostile4
Posté le 16-08-2005 à 12:24:53  profilanswer
 

J'ai oublié de préciser que mon compilateur C était "devcpp-4.9.9.2"

n°1177033
_darkalt3_
Proctopathe
Posté le 16-08-2005 à 12:28:51  profilanswer
 

Attention à l'orthographe.
 
Pourquoi un "return" alors que la spécification de tu ne précises rien dans le prototype de ton "main" ?  
 
Sinon:

Code :
  1. [alt3@endor code]$ gcc ./test.c
  2. [alt3@endor code]$ ./a.out
  3. 4
  4. Le caractere saisi est: 4
  5. [alt3@endor code]$ ./a.out
  6. t
  7. Le caractere saisi est: t

n°1177036
Profil sup​primé
Posté le 16-08-2005 à 12:32:05  answer
 

Change de bouquin. [:petrus75]

n°1177037
Profil sup​primé
Posté le 16-08-2005 à 12:34:20  answer
 

_darkalt3_ a écrit :

Attention à l'orthographe.
 
Pourquoi un "return" alors que la spécification de tu ne précises rien dans le prototype de ton "main" ?  


 
Parce qu'en vieux C, le type "int" était implicite, donc il faut quand même un return 0; à la fin du main...
 
Hum et à croire GCC c'est toujours d'actualité, mais c'est de toutes façons pas l'usage. :o


Message édité par Profil supprimé le 16-08-2005 à 12:36:36
n°1177040
_darkalt3_
Proctopathe
Posté le 16-08-2005 à 12:41:41  profilanswer
 


 
j'aime pas les types implicites :o


Message édité par _darkalt3_ le 16-08-2005 à 12:48:02

---------------
Töp of the plöp
n°1177056
theshockwa​ve
I work at a firm named Koslow
Posté le 16-08-2005 à 13:19:56  profilanswer
 

par défaut, le type de main est int, et par défaut, il retourne 0 (donc, en l'absence de return, le comportement est défini et standard [:petrus75])

n°1177058
gocho
Posté le 16-08-2005 à 13:22:41  profilanswer
 

euh ta bien tape sur entree apres ton caractere? :pt1cable:

n°1177059
Profil sup​primé
Posté le 16-08-2005 à 13:23:15  answer
 

theshockwave a écrit :

par défaut, le type de main est int, et par défaut, il retourne 0 (donc, en l'absence de return, le comportement est défini et standard [:petrus75])


 
Au temps pour moi. :o
 
Mais si c'est valide en C ANSI (enfin la norme du K&R quoi...), est-ce que ça l'est encore en C89/90 et C99 ?

n°1177067
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-08-2005 à 13:39:39  profilanswer
 

_darkalt3_ a écrit :

Pourquoi un "return" alors que la spécification de tu ne précises rien dans le prototype de ton "main" ?  


Parce qu'en C90, 'rien' pour le type retourné signifie implicitement 'int'. (En C99, c'est une erreur). Pas de retour, c'est 'void' (et avec main(), ça n'existe pas en C standard).


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 16-08-2005 à 13:39:39  profilanswer
 

n°1177072
push
/dev/random
Posté le 16-08-2005 à 13:42:40  profilanswer
 

Ce que dis theShOcKwAvE est incorrect, en C89 on peut ne pas indiquer le type de retour int de la fonction main mais on doit indiquer le return, et en C99 le type de retour doit être indiqué mais le return 0; est implicite si rien n'est spécifié.

n°1177077
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-08-2005 à 13:51:58  profilanswer
 

hostile4 a écrit :

je me suis procuré un ouvrage sur le langage C.


Quel livre ?

Citation :

Et sur l'un des 1er programmes je n'ai pas le résultat souhaité , alors que dans mon bouquin il m'explique que cela marche trés bien
 
Voici le programme:
 

#include <stdio.h>
main()
{      char x;
       x=getc(stdin);
       printf("Le caractere saisi est: %c\n", x);
      return(0);
}




Ca commence mal. Si ton livre te dit réellement de définir x de type char, c'est poubelle directe. Le type retourné par getc() est int. Et c'est important, car en cas d'erreur de lecture, getc() retourne un int < 0 (EOF), ce qu'un char sera incapable d'identifier.
 

Citation :


D'aprés mon livre donc , ce programme devrait me permettre d'afficher a l'écran le caractére que je tape au clavier , or lorsque j'exécute ce programme je peu tapé autant de lettre que je désire jamais la phrase "Le caractere saisi est:" ne s'affiche.


Ce comportement est normal. avec cette fonction, tu peux taper (et éditer) autant de caractères que tu veux (dans les limites du système), le programme restera suspendu jusqu'à ce que tu appuyes sur la touche <enter>. Ensuite, le caractère lu sera le plus ancien caractère tapé. Pour lire les autres, on rappelle la fonction. Quand on lit un '\n', on a terminé de lire la ligne saisie. La prochaine lecture devient blocante.
 
Si ton livre de C n'explique pas ça, c'est poubelle directement.
 
Nota :  

  • utiliser les balises 'fixed' ou 'cpp'...
  • il est recommandé d'expliciter le type retourné et de mettre 'void' si on a pas de paramètres.
  • return est une instruction et non une fonction. Les parenthèses sont inutiles.
  • soigner la présentation (indentation).

#include <stdio.h>
int main (void)
{      
   int x = getc (stdin);
   printf ("Le caractere saisi est: '%c'\n", x);
   return 0;
}


Message édité par Emmanuel Delahaye le 16-08-2005 à 14:11:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1177115
hostile4
Posté le 16-08-2005 à 14:50:10  profilanswer
 

Merci Emmanuel pour tes explications , le livre est "le langage C" de tony Zhang ,edition "Le tout en poche".
Sinon ce bouquin ne dis pas de définir x comme étant de type char ... c'est moi qui ai fait le boulet

n°1177187
_darkalt3_
Proctopathe
Posté le 16-08-2005 à 16:24:22  profilanswer
 

Emmanuel Delahaye a écrit :

Parce qu'en C90, 'rien' pour le type retourné signifie implicitement 'int'. (En C99, c'est une erreur). Pas de retour, c'est 'void' (et avec main(), ça n'existe pas en C standard).


 
 
c'était à l'auteur que je m'adressais ;)
(j'aurais du préciser que ce n'était qu'une remarque)


---------------
Töp of the plöp
n°1178979
hostile4
Posté le 18-08-2005 à 17:49:16  profilanswer
 

J'ai de nouveau un petit soucis ...
 
Si je rentre cela:
 
 
#include <stdio.h>
#include<stdlib.h>  
 
int x=1;
int *ptr_int;
ptr_int = malloc(x*sizeof(int));
 
 
et bien mon compilateur me dit ceci:  
invalid conversion from 'void' to 'int'
 
alors qu'a nouveau dans mon bouquin cela ne semble poser aucun soucis...
Quelqu'un aurait une explication ??

n°1178994
theshockwa​ve
I work at a firm named Koslow
Posté le 18-08-2005 à 18:00:56  profilanswer
 

compile en C, pas en C++ :o

n°1179058
gocho
Posté le 18-08-2005 à 18:53:10  profilanswer
 

euh...tu l'as juste pas marque ta fonction main ou tu a carrement oublie de la faire????[:at war with emo]

n°1179085
_p1c0_
Posté le 18-08-2005 à 19:16:33  profilanswer
 

hostile4 a écrit :

ptr_int = malloc(x*sizeof(int));


 
Moi je mettrais plutot :
 

Code :
  1. ptr_int = (int *)malloc(x*sizeof(int));


 
 :)

n°1179104
Emmanuel D​elahaye
C is a sharp tool
Posté le 18-08-2005 à 19:33:00  profilanswer
 

_p1c0_ a écrit :

Moi je mettrais plutot :

Code :
  1. ptr_int = (int *)malloc(x*sizeof(int));




En C, non. Inutile.

ptr_int = malloc (x * sizeof * ptr_int);


 
http://mapage.noos.fr/emdel/notes.htm#malloc


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1179110
Emmanuel D​elahaye
C is a sharp tool
Posté le 18-08-2005 à 19:37:20  profilanswer
 

hostile4 a écrit :

J'ai de nouveau un petit soucis ...
 
Si je rentre cela:


#include <stdio.h>
#include<stdlib.h>  
 
int x=1;
int *ptr_int;
ptr_int = malloc(x*sizeof(int));
 


et bien mon compilateur me dit ceci:  
invalid conversion from 'void' to 'int'


A mon avis, il dit plutôt  
 
"invalid conversion from 'void *' to 'int *'"
 
ce qui est typique d'un compilateur C++...

Citation :

alors qu'a nouveau dans mon bouquin cela ne semble poser aucun soucis...
Quelqu'un aurait une explication ??

Ton code est incomplet. Chez moi (compilateur C et non C++), ceci compile sans erreur :  


#include <stdlib.h>
 
int main (void)
{
   int x = 1;
   int *ptr_int;
   ptr_int = malloc (x * sizeof (int));
   return 0;
}


 
Mais c'est tordu. Un peu de lecture :  
 
http://mapage.noos.fr/emdel/notes.htm#malloc


Message édité par Emmanuel Delahaye le 18-08-2005 à 19:37:53

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1179376
_p1c0_
Posté le 19-08-2005 à 10:13:26  profilanswer
 

Emmanuel Delahaye a écrit :

En C, non. Inutile.

ptr_int = malloc (x * sizeof * ptr_int);


 
http://mapage.noos.fr/emdel/notes.htm#malloc


 
Merci pour le lien, je le saurais pour la suite!!  :)  

n°1179430
hostile4
Posté le 19-08-2005 à 10:52:36  profilanswer
 

Effectivement je complilais en C++ ...  :pfff:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probléme de saisi de caractére !!

 

Sujets relatifs
Probleme avec mon systeme de pagesprobleme avec sort [resolu]
Probleme avec script : XML to PHPProblème de hauteur de division
Comment lister les enregistrements contenant tel ou tel caractère?problème de requête
Probleme pour protéger une video avec un .htaccessProblème avec BBClone
Problème de caractères accentués via PHP[résolu]Probleme PHP/Mysql bizzarre
Plus de sujets relatifs à : Probléme de saisi de caractére !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR