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

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1569975
tomsoft
Posté le 04-06-2007 à 19:23:02  profilanswer
 

: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:

mood
Publicité
Posté le 04-06-2007 à 19:23:02  profilanswer
 

n°1569976
accelahpp8
Posté le 04-06-2007 à 19:36:28  profilanswer
 

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
n°1569977
tomsoft
Posté le 04-06-2007 à 19:39:32  profilanswer
 

un long permet des valeurs negatives et decimales ?

n°1569978
minokitaro
Posté le 04-06-2007 à 19:39:42  profilanswer
 

remplace tes  %lf par %f

n°1569979
tomsoft
Posté le 04-06-2007 à 19:40:50  profilanswer
 

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

n°1569983
minokitaro
Posté le 04-06-2007 à 19:46:49  profilanswer
 

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

n°1569984
tomsoft
Posté le 04-06-2007 à 19:47:32  profilanswer
 

ok :jap:

n°1569985
tomsoft
Posté le 04-06-2007 à 19:52:57  profilanswer
 

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:

n°1569992
matafan
Posté le 04-06-2007 à 20:03:04  profilanswer
 

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.

n°1570043
Taz
bisounours-codeur
Posté le 04-06-2007 à 22:45:44  profilanswer
 

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

mood
Publicité
Posté le 04-06-2007 à 22:45:44  profilanswer
 

n°1570092
Sve@r
Posté le 05-06-2007 à 07:55:19  profilanswer
 

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.
n°1570093
minokitaro
Posté le 05-06-2007 à 08:03:45  profilanswer
 

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

n°1570097
matafan
Posté le 05-06-2007 à 08:12:26  profilanswer
 

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
n°1570098
minokitaro
Posté le 05-06-2007 à 08:23:12  profilanswer
 

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

n°1570120
matafan
Posté le 05-06-2007 à 09:23:15  profilanswer
 

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.

n°1570128
minokitaro
Posté le 05-06-2007 à 09:43:38  profilanswer
 

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.

n°1570129
Taz
bisounours-codeur
Posté le 05-06-2007 à 09:44:00  profilanswer
 

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 ...

n°1570130
Taz
bisounours-codeur
Posté le 05-06-2007 à 09:44:26  profilanswer
 

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.

n°1570131
minokitaro
Posté le 05-06-2007 à 09:46:32  profilanswer
 

qu'est ce qui est faux ?

n°1570132
Taz
bisounours-codeur
Posté le 05-06-2007 à 09:46:35  profilanswer
 

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

n°1570133
Taz
bisounours-codeur
Posté le 05-06-2007 à 09:53:15  profilanswer
 

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

n°1570134
Taz
bisounours-codeur
Posté le 05-06-2007 à 09:53:48  profilanswer
 

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

n°1570138
minokitaro
Posté le 05-06-2007 à 09:57:03  profilanswer
 

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

n°1570169
_darkalt3_
Proctopathe
Posté le 05-06-2007 à 10:41:40  profilanswer
 
n°1570177
tomsoft
Posté le 05-06-2007 à 10:52:41  profilanswer
 

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

n°1570498
Sve@r
Posté le 05-06-2007 à 17:41:07  profilanswer
 

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.
n°1570664
matafan
Posté le 06-06-2007 à 08:43:14  profilanswer
 

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.

n°1570687
Taz
bisounours-codeur
Posté le 06-06-2007 à 09:18:00  profilanswer
 

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

n°1570705
matafan
Posté le 06-06-2007 à 09:33:20  profilanswer
 

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
n°1572214
Taz
bisounours-codeur
Posté le 08-06-2007 à 12:32:47  profilanswer
 

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
n°1572376
matafan
Posté le 08-06-2007 à 15:22:03  profilanswer
 

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.

n°1572414
Taz
bisounours-codeur
Posté le 08-06-2007 à 15:52:32  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Problème bizarre avec GCC (pour débutant)[Visual C++] serialize débutant
UBUNTU: Soucis Oracle 10g Express Edition aprés installationdebutant vbs
[Débutant] Assistant création base de données avec formulaireProblème débutant
Pygame - un petit jeuSoucis avec les variables de session
correction tout petit script (debutant) (JAVASCRIPT) 
Plus de sujets relatifs à : [C] Petit soucis de debutant, certainement vraiment tres bete...


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