Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Premier programme fait maison...

116 réponses
Avatar
listes
Salut,

Voilà... je suis super débutant... Je poste ici mon premier programme
fait maison....

Je voudrait avoir votre avis..

J'utilise Xcode sur un macintosh sous 10.4.4, mais cela n'a pas beaucoup
d'importance...

#include <stdio.h>
#include <string.h>

int main (int argc, const char * argv[]) {

//on défini les variables
char Nom[200];
float quantite; // la variable quantité
float prix; // la variable prix
float total; // la variable total
float tauxtva; // le taux de tva
float soustotal; // le sous tatal sans la tva
float tva; // le montant de la tva

printf("Entrez votre nom : ");
scanf("%s", Nom);
printf("\n");
printf("Taux de tva ? : "); // on demande le taux de tva
scanf("%f",&tauxtva);
printf("\n");
printf("Quantite de l'article a facturer ? : "); // on demande
la quantité
scanf("%f",&quantite);
printf("\n");
printf("Le prix de l'article ? : "); // on demande le prix
scanf("%f",&prix);
printf("\n");

// le calcul

soustotal = quantite * prix;
tva = (soustotal * tauxtva)/100;
total = soustotal + tva;

//on affiche le résultat

printf ("Montant a payer hors tva %.2f\n\n",soustotal);
printf ("TVA a payer : %.2f\n\n", tva);
printf ("%s, vous avez un total a payer : %.2f\n", Nom, total);

return 0;
}

Est-ce assez clair dans la présentation (pour ce cas-ci bien sur) ?

A+

10 réponses

1 2 3 4 5
Avatar
Pierre Maurette
#include <math.h>
(inutile ici je pense,


ben oui. A quoi ca sert ?
char Nom[200];


Il est de bon ton de ne pas coder en dur ce genre de valeur:


Pourquoi ? Il n'y a pas de meilleur endroit pour definir la taille d'un
tableau que la definition du tableau lui meme. Ca facilite la lecture et la
maintenance. sizeof permet toujours de retrouver la taille, sinon, la passer
en paramètre.
#define TAILLE_NOM 200
/* ... */
char nom[TAILLE_NOM];
ou
char nom[TAILLE_NOM + 1];


incoherent.

char nom[LONGUEUR_MAX_NOM + 1];
C'est effectivement plus explicite. Vais-je critiquer l'utilisation du

français LONGUEUR_ ... ?



printf("Quantite de l'article a facturer ? : "); // on demande
la quantité



Ne compile pas... (ligne coupée)
Faut-il répondre ?


Tu es bougon, aujourd'hui. Quand tu es bougon, tu as tendance à écrire
n'importe quoi. Je vais faire avec ...

--
Pierre Maurette



Avatar
Laurent Deniau
Emmanuel Delahaye wrote:

par defaut stdout vide son buffer sur un 'n'

setvbuf(stdout, 0, _IONBF);



bienvu, j'ai fait ca de memoire.



main.c:33: error: too few arguments to function `setvbuf'

assert(scanf("%199s", Nom) == 1);



Argh, ! Ne jamais faire ça ! Non compilé (du tout) en mode release ! Le
scanf() saute aussi !


Il faut lire jusqu'au bout mon post et l'explication sur les assert.
Ceci dit, je ne deactive jamais les assert, meme en production, car je
les utilise presque exclusivement pour verifier des pre-conditions et
comme dans Eiffel, je laisse toujours les verifications des
pre-conditions. Exceptionnellement, j'utilise la facilite qu'offre
assert.h d'etre inclu plusieurs fois pour activer-desactiver localement
un assert.

7.2-1
The assert macro is redefined according to the current state of NDEBUG
each time that <assert.h> is included.

Et de tout facon j'utilise eassert qui a le meme comportement que assert
(et eassert.h que assert.h) mais leve une exception ExBadAssert en cas
d'echec au lieu de quitter le programme.

Par simplicite, j'ai utilise assert pour les verifications, mais un
test avec if() suivit d'un message d'erreur clair et le cas echeant
une sortie propre du programme sont preferable.



Je veux !


Ben voila.

a+, ld.


Avatar
candide
Harpo wrote in news:43e3508d$0$19704$8fcfb975
@news.wanadoo.fr:


avec gcc '-W -Wall' est un minimum.


Quelle différence avec gcc -Wall ?


Candide

Avatar
Jean-Marc Bourguet
Laurent Deniau writes:

Et de tout facon j'utilise eassert qui a le meme comportement que assert
(et eassert.h que assert.h) mais leve une exception ExBadAssert en cas
d'echec au lieu de quitter le programme.


Pour pouvoir faire quelque chose une fois que l'exception est
attrapee, il faut etre sur d'au moins une partie de l'etat du
programme. De quelle partie de l'etat es-tu sur apres qu'une
assertion echoue? Si tu as l'equivalent des destructeurs, comment
ceux-ci peuvent ils etre sur que l'etat des objets qu'ils doivent
detruire, ils ne connaissent pas la cause pour laquelle ils sont
appeles.

Je comprends qu'on puisse tenter de faire des choses avant de partir,
mais a mon sens elles sont limitees (sauver une copie des donnees en
memoire mais certainement pas ecraser les donnees originales).

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Marc Boyer
Le 03-02-2006, candide a écrit :
Harpo wrote in news:43e3508d$0$19704$8fcfb975
@news.wanadoo.fr:


avec gcc '-W -Wall' est un minimum.


Quelle différence avec gcc -Wall ?


info gcc ?

`-W'
Print extra warning messages for these events:

* A function can return either with or without a value.
(Falling off the end of the function body is considered
returning without a value.) For example, this function would
evoke such a warning:

foo (a)
{
if (a > 0)
return a;
}

* An expression-statement or the left-hand side of a comma
expression contains no side effects. To suppress the
warning, cast the unused expression to void. For example, an
expression such as `x[i,j]' will cause a warning, but
`x[(void)i,j]' will not.

* An unsigned value is compared against zero with `<' or `>='.

* A comparison like `x<=y<=z' appears; this is equivalent to
`(x<=y ? 1 : 0) <= z', which is a different interpretation
from that of ordinary mathematical notation.

* Storage-class specifiers like `static' are not the first
things in a declaration. According to the C Standard, this
usage is obsolescent.

* The return type of a function has a type qualifier such as
`const'. Such a type qualifier has no effect, since the
value returned by a function is not an lvalue. (But don't
warn about the GNU extension of `volatile void' return types.
That extension will be warned about if `-pedantic' is
specified.)

* If `-Wall' or `-Wunused' is also specified, warn about unused
arguments.

* A comparison between signed and unsigned values could produce
an incorrect result when the signed value is converted to
unsigned. (But don't warn if `-Wno-sign-compare' is also
specified.)

* An aggregate has a partly bracketed initializer. For
example, the following code would evoke such a warning,
because braces are missing around the initializer for `x.h':

struct s { int f, g; };
struct t { struct s h; int i; };
struct t x = { 1, 2, 3 };

* An aggregate has an initializer which does not initialize all
members. For example, the following code would cause such a
warning, because `x.h' would be implicitly initialized to
zero:

struct s { int f, g, h; };
struct s x = { 3, 4 };




--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain


Avatar
candide
Marc Boyer wrote in
news::


Quelle différence avec gcc -Wall ?


info gcc ?


Je ne suis pas sous Unix.

* If `-Wall' or `-Wunused' is also specified, warn about unused
arguments.


Donc c'est ça la seule différence ? Bon, c'est toujours pas parfaitement
limpide.

Candide.


Avatar
Marc Boyer
Le 03-02-2006, candide a écrit :
Marc Boyer wrote in
news::


Quelle différence avec gcc -Wall ?


info gcc ?


Je ne suis pas sous Unix.


http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Warning-Options.html#Warning-Options

* If `-Wall' or `-Wunused' is also specified, warn about unused
arguments.


Donc c'est ça la seule différence ? Bon, c'est toujours pas parfaitement
limpide.


Non, ça c'est *une* des différences.
Il y a aussi les tests sur les non signés (toujours piégant), etc.

Marc Boyer
--
Entre le fort et le faible, c'est la liberte qui opprime et le droit
qui libere. Henri Lacordaire, Dominicain



Avatar
Emmanuel Delahaye
char nom[LONGUEUR_MAX_NOM + 1];


C'est effectivement plus explicite. Vais-je critiquer l'utilisation du
français LONGUEUR_ ... ?


Essaye toujours. Quel est le problème ?

printf("Quantite de l'article a facturer ? : "); // on demande
la quantité




Ne compile pas... (ligne coupée)


Faut-il répondre ?


J'ai donné une explication en réponse au posteur original. Visiblement,
tu n'as pas pris la peine de compiler le code du PO.

Tu es bougon, aujourd'hui.


Non.

Quand tu es bougon, tu as tendance à écrire
n'importe quoi. Je vais faire avec ...


Je n'ai pas écrit n'importe quoi.

--
A+

Emmanuel Delahaye




Avatar
Emmanuel Delahaye
assert(scanf("%199s", Nom) == 1);


Argh, ! Ne jamais faire ça ! Non compilé (du tout) en mode release !
Le scanf() saute aussi !


Il faut lire jusqu'au bout mon post et l'explication sur les assert.
Ceci dit, je ne deactive jamais les assert, meme en production,


Erreur. Je vois que tu n'as jamais utilisé VC++6 en mode release...
NDEBUG est défini (par défaut), et ça aurait fait drôle à ton code...

D'autre part, dans les regles de production de code de telle ou telle
boite, il pourrait très bien être spécifié que le code de production est
compilé avec -DNDEBUG.

Il ne faut donc absolument pas utiliser assert() (celui du C standard)
pour vérifier autre chose que de la conception. Jamais les comportements
anormaux d^s au système ou à l'utilisateur.

--
A+

Emmanuel Delahaye



Avatar
Pierre Maurette
[...]
printf("Quantite de l'article a facturer ? : "); // on demande
la quantité




Ne compile pas... (ligne coupée)


Faut-il répondre ?


J'ai donné une explication en réponse au posteur original. Visiblement, tu
n'as pas pris la peine de compiler le code du PO.
Je t'en prie...

Je l'ai copié, collé, corrigé une ligne coupée lors de l'aventure
usenet, compilé et lancé.


Tu es bougon, aujourd'hui.


Non.
Oh que si. Et quelque part, ça me rassure. A mon âge, on vit facilement

sur des valeurs et des habitudes.


Quand tu es bougon, tu as tendance à écrire
n'importe quoi. Je vais faire avec ...


Je n'ai pas écrit n'importe quoi.
Non. Je transige : tu es bougon mais tu n'as pas écrit n'importe quoi.


--
Pierre Maurette





1 2 3 4 5