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");
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.
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
#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.
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.
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
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.
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.
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.
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
Harpo <trashcan@hotmail.com> wrote in news:43e3508d$0$19704$8fcfb975
@news.wanadoo.fr:
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
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
Laurent Deniau <laurent.deniau@cern.ch> 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
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
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
Le 03-02-2006, candide <candide@domain.invalid> a écrit :
Harpo <trashcan@hotmail.com> 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
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
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.
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> wrote in
news:slrndu6rpt.rd5.Marc.Boyer@localhost.localdomain:
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.
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
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
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.
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
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
[...]
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.