Probléme de saisi de caractére !! - C - Programmation
Marsh Posté le 16-08-2005 à 12:24:53
J'ai oublié de préciser que mon compilateur C était "devcpp-4.9.9.2"
Marsh Posté le 16-08-2005 à 12:28:51
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 :
|
Marsh Posté le 16-08-2005 à 12:34:20
_darkalt3_ a écrit : Attention à l'orthographe. |
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.
Marsh Posté le 16-08-2005 à 12:41:41
j'aime pas les types implicites
Marsh Posté le 16-08-2005 à 13:19:56
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 )
Marsh Posté le 16-08-2005 à 13:23:15
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 ) |
Au temps pour moi.
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 ?
Marsh Posté le 16-08-2005 à 13:39:39
_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).
Marsh Posté le 16-08-2005 à 13:42:40
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é.
Marsh Posté le 16-08-2005 à 13:51:58
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
|
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 : |
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 :
#include <stdio.h> |
Marsh Posté le 16-08-2005 à 14:50:10
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
Marsh Posté le 16-08-2005 à 16:24:22
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)
Marsh Posté le 18-08-2005 à 17:49:16
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 ??
Marsh Posté le 18-08-2005 à 18:53:10
euh...tu l'as juste pas marque ta fonction main ou tu a carrement oublie de la faire????
Marsh Posté le 18-08-2005 à 19:16:33
hostile4 a écrit : ptr_int = malloc(x*sizeof(int)); |
Moi je mettrais plutot :
Code :
|
Marsh Posté le 18-08-2005 à 19:33:00
_p1c0_ a écrit : Moi je mettrais plutot :
|
En C, non. Inutile.
ptr_int = malloc (x * sizeof * ptr_int); |
http://mapage.noos.fr/emdel/notes.htm#malloc
Marsh Posté le 18-08-2005 à 19:37:20
hostile4 a écrit : J'ai de nouveau un petit soucis ...
|
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... |
Ton code est incomplet. Chez moi (compilateur C et non C++), ceci compile sans erreur :
|
Mais c'est tordu. Un peu de lecture :
http://mapage.noos.fr/emdel/notes.htm#malloc
Marsh Posté le 19-08-2005 à 10:13:26
Emmanuel Delahaye a écrit : En C, non. Inutile.
|
Merci pour le lien, je le saurais pour la suite!!
Marsh Posté le 16-08-2005 à 11:42:17
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 .
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