[C] Petit soucis de debutant, certainement vraiment tres bete...

Petit soucis de debutant, certainement vraiment tres bete... [C] - C - Programmation

Marsh Posté le 04-06-2007 à 19:23:02    

:hello:  
 
je debute en C apres avoir passé sur VB, Html, PHP,
 
et la j'ai un soucis, tout me parrait bon, mais ca ne marche point  :??:  
 
je suis sous ubuntu, j'utilise code::blocks :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     float first,second,result;
  6. printf("Entrez un premier nombre :" );
  7. scanf("%lf",&first);
  8. printf("Entrez un deuxieme nombre :" );
  9. scanf("%lf",&second);
  10. result = first * second;
  11. printf("Le resultat de la multiplication de %lf par %lf est %lf",first,second,result);
  12. return 0;
  13. }


 
je voudrais que le prog me multiplie mes 2 nombres, et me la renvoie,
 
donc ca me fais ca :
 
http://img488.imageshack.us/img488/2180/snapshot7dm8.png
 
ou est le probleme ? :??:  
 
 :jap:

Reply

Marsh Posté le 04-06-2007 à 19:23:02   

Reply

Marsh Posté le 04-06-2007 à 19:36:28    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. long first;
  6. long second;
  7. long result;
  8. printf("Entrez un premier nombre :" );
  9. scanf("%lf",&first);
  10. printf("Entrez un deuxieme nombre :" );
  11. scanf("%lf",&second);
  12. result = first * second;
  13. printf("Le resultat de la multiplication de %lf par %lf est %lf",first,second,result);
  14. return 0;
  15. }


 
Pourquoi ne pas avoir créé de variable de type long?


Message édité par accelahpp8 le 04-06-2007 à 19:37:09
Reply

Marsh Posté le 04-06-2007 à 19:39:32    

un long permet des valeurs negatives et decimales ?

Reply

Marsh Posté le 04-06-2007 à 19:39:42    

remplace tes  %lf par %f

Reply

Marsh Posté le 04-06-2007 à 19:40:50    

merci ca marche, mais j'avais lu qu'il fallait mettre %lf, pourquoi ?

Reply

Marsh Posté le 04-06-2007 à 19:46:49    

%lf ou %ld = long float ou double  c'est pareil

Reply

Marsh Posté le 04-06-2007 à 19:47:32    

ok :jap:

Reply

Marsh Posté le 04-06-2007 à 19:52:57    

existe t-il un type qui me permette de rentrer des valeurs entieres ,decimales ou negatives (-65.384624) par exemple,
 
autre que float qui me permette de ne pas afficher 6 zero derriere la virgule ?
 
:jap:

Reply

Marsh Posté le 04-06-2007 à 20:03:04    

minokitaro a écrit :

%lf ou %ld = long float ou double  c'est pareil


1) %lf ça n'existe pas, même si beaucoup de compilateurs l'accèptent comme équivalent à %f
2) %ld c'est un long, pas un "long float" ni un double
 
double c'est %f, point.

Reply

Marsh Posté le 04-06-2007 à 22:45:44    

matafan a écrit :

1) %lf ça n'existe pas, même si beaucoup de compilateurs l'accèptent comme équivalent à %f
2) %ld c'est un long, pas un "long float" ni un double
 
double c'est %f, point.


1) faux
2) vrai
et archi faux

Reply

Marsh Posté le 04-06-2007 à 22:45:44   

Reply

Marsh Posté le 05-06-2007 à 07:55:19    

tomsoft a écrit :

existe t-il un type qui me permette de rentrer des valeurs entieres ,decimales ou negatives (-65.384624) par exemple, autre que float


Le type "double" qui fait 2 fois la taille d'un float. Et certains compilos acceptent le type "long double" qui n'est pas standard et qui fait 2,5 fois la taille d'un float
 

tomsoft a écrit :

qui me permette de ne pas afficher 6 zero derriere la virgule ?


L'affichage se fait au printf. Tu peux compléter ton "%f" par des options situées entre "%" et "f". Exemple "%.2f" => t'affichera que 2 chiffres après la virgule. Lis avec attention le "man printf"...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-06-2007 à 08:03:45    

heu oui donc  
%lf pour double ou long float,
%f pour float,
%ld pour long int ou long tout court,
%d pour int
pour la precision apres la virgule => %.2f pour 2chiffre apres la virgule

Reply

Marsh Posté le 05-06-2007 à 08:12:26    

Non, %f c'est pour un double.

 

Pour compéter les remarques toujours très précsises et détaillées de Taz :

 

1) Il y a effectivement %lf en C99, qui est équivalent à %f
2) Pour double il y a évidemment aussi les formes %e; %g et %a


Message édité par matafan le 05-06-2007 à 08:12:55
Reply

Marsh Posté le 05-06-2007 à 08:23:12    

t'es sur que %f c'est pour double ?  
parce que quand je reprend le code de tomsoft et je met en double ses variable avec %f ca n'affiche plus rien :p

Reply

Marsh Posté le 05-06-2007 à 09:23:15    

Oui, je suis sûr. Si ça n'affiche plus rien, il y a un problème ailleurs. Poste ton code si tu veux.

      f,F    The double argument is rounded and converted to decimal notation
              in  the  style  [-]ddd.ddd, where the number of digits after the
              decimal-point character is equal to the precision specification.
              If  the precision is missing, it is taken as 6; if the precision
              is explicitly zero, no decimal-point character  appears.   If  a
              decimal point appears, at least one digit appears before it.

Reply

Marsh Posté le 05-06-2007 à 09:43:38    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     double first,second,result;
  6.     printf("Entrez un premier nombre :" );
  7.     scanf("%f",&first);
  8.     printf("Entrez un deuxieme nombre :" );
  9.     scanf("%f",&second);
  10.     result = first * second;
  11.     printf("Le resultat de la multiplication de %f par %f est %f",first,second,result);
  12. }


 
voila.
tous s'affiche correctement lorsque je remplace les %f par %lf, mais pas avec les %f.

Reply

Marsh Posté le 05-06-2007 à 09:44:00    

matafan a écrit :

Oui, je suis sûr. Si ça n'affiche plus rien, il y a un problème ailleurs. Poste ton code si tu veux.

      f,F    The double argument is rounded and converted to decimal notation
              in  the  style  [-]ddd.ddd, where the number of digits after the
              decimal-point character is equal to the precision specification.
              If  the precision is missing, it is taken as 6; if the precision
              is explicitly zero, no decimal-point character  appears.   If  a
              decimal point appears, at least one digit appears before it.



si tu regardes le man de printf ...

Reply

Marsh Posté le 05-06-2007 à 09:44:26    

minokitaro a écrit :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     double first,second,result;
  6.     printf("Entrez un premier nombre :" );
  7.     scanf("%f",&first);
  8.     printf("Entrez un deuxieme nombre :" );
  9.     scanf("%f",&second);
  10.     result = first * second;
  11.     printf("Le resultat de la multiplication de %f par %f est %f",first,second,result);
  12. }


 
voila.
tous s'affiche correctement lorsque je remplace les %f par %lf, mais pas avec les %f.


toujours faux.

Reply

Marsh Posté le 05-06-2007 à 09:46:32    

qu'est ce qui est faux ?

Reply

Marsh Posté le 05-06-2007 à 09:46:35    

Sve@r a écrit :

Et certains compilos acceptent le type "long double" qui n'est pas standard et qui fait 2,5 fois la taille d'un float


Puisque c'est C99, ils ont raison

Reply

Marsh Posté le 05-06-2007 à 09:53:15    

bon pour ceux qui savent lire
 
float : printf %f / scanf %f
double : printf %f / scanf %lf
[C99] long double : printf %Lf / scanf %Lf

Reply

Marsh Posté le 05-06-2007 à 09:53:48    

et quand on aura résolu ce problème, on pourra passer aux choses sérieuses et dire que scanf est mauvais.

Reply

Marsh Posté le 05-06-2007 à 09:57:03    

ha oki c'etait donc scanf le fautif :pt1cable:

Reply

Marsh Posté le 05-06-2007 à 10:41:40    

Reply

Marsh Posté le 05-06-2007 à 10:52:41    

:jap: merci pour l'interet porté a mon erreur :d

Reply

Marsh Posté le 05-06-2007 à 17:41:07    

Taz a écrit :

float : printf %f / scanf %f
double : printf %f / scanf %lf


Ah ? On précise pas "lf" pour le printf d'un double ou c'est un copier/coller qui a foiré ???

Taz a écrit :

[C99] long double : printf %Lf / scanf %Lf


Autant compléter
char: printf %c / scanf %c
int: printf %d / scanf %d
unsigned int: printf %u / scanf %u
short: printf %hd / scanf %hd
unsigned short: printf %hu / scanf %hu
long: printf %ld / scanf %ld
unsigned long: printf %lu / scanf %lu
char[] ou char*: printf %s / scanf %s (avec évidemment toutes les vérifications qui s'imposent quand on traite des chaînes ou des pointeurs sur des chaînes)


Message édité par Sve@r le 05-06-2007 à 17:41:53

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 06-06-2007 à 08:43:14    

Décidément personne ne veut me croire... Pour printf, %f et %lf c'est la même chose, sauf que %lf c'est du C99.

Reply

Marsh Posté le 06-06-2007 à 09:18:00    

T'as qu'à appeler ED si tu ne crois ni la documentation, ni moi-même. Pour ma part, "%lf" a un comportement indéterminé avec printf

Reply

Marsh Posté le 06-06-2007 à 09:33:20    

Je ne trouve pas le document normatif qui parle des formats de printf en C99, mais si tu vas sur http://gcc.gnu.org/c99status.html tu verra que "%lf conversion specifier llowed in printf" est marqué "Done", ce qui signifie que c'est implémenté dans gcc, et laisse entendre que c'est demandé par la norme C99.


Message édité par matafan le 06-06-2007 à 09:33:59
Reply

Marsh Posté le 08-06-2007 à 12:32:47    

Citation :

l (ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a
long int or unsigned long int argument; that a following n
conversion specifier applies to a pointer to a long int argument; that a
following c conversion specifier applies to a wint_t argument; that a
following s conversion specifier applies to a pointer to a wchar_t
argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
specifier.


http://www.open-std.org/JTC1/SC22/ [...] /n1124.pdf 276 Library §7.19.6.1


Message édité par Taz le 08-06-2007 à 12:33:27
Reply

Marsh Posté le 08-06-2007 à 15:22:03    

Ca va dans mon sens... La norme dit que le "l" devant le "f" n'a aucun effet, ce qui implique en particulier que ça ne doit pas générer d'erreur. Un compilo C99 doit accepter %lf.

Reply

Marsh Posté le 08-06-2007 à 15:52:32    

si tu veux tu peux aussi foutre des (void)0; dans tous les sens

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed