Programme console C

vh_77 Messages postés 539 Statut Membre -  
HACKER 712 Messages postés 1463 Statut Contributeur -
Bonjour, je m'entraîne depuis hier au site du zéro à faire des programmes, des petits car je veux apprendre le C.
Voici mon code et je vous expliquerais mon problème plus tard.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
long age = 0;
printf ("quel age avez vous ? \n\n");
scanf ("%ld", &age);
if (age >=18)
{
printf ("vous etes majeur ! \n\n");
}
else if (age > 10)
{
printf ("vous ete mineur ! il ne te reste plus que 1 an\n\n");
}
else
{
printf (" c est dommage tu es beaucoup trop jeune ! ! ! \n\n");
}

system ("PAUSE");
return 0;
}

Mon problème est que je voudrais que quand par exemple la console s'ouvre :
j'entre le nombre 18 ===> il y a marquer " vous etes majeur"
j'entre le nombre 17 ===> il y a marquer "vous etes mineur ! il ne vous reste plus que 1 an"
j'entre le nombre 16====> il y a marquer"vous etes mineur ! il ne vous reste plus que 1 an"

Voila je voudrais faire en sorte par exemple si je met 16 ans il y a marquer il ne vous reste plus que 2 ans et chaque autre nombre que je taperais ce serait la même chose mais comment ?
--
dsl pour l'URL: http://rohcavamaintenant.free.fr/Jo/Petitions.html
et https://www.facebook.com/group.php?gid=21375831670 soyons avec les animaux
Configuration: Windows Vista
Firefox 3.0.10
A voir également:

43 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

En langage C, le problème est d'afficher, après saisie d'un âge avec scanf, si l'utilisateur est majeur ou mineur et, pour les mineurs, le nombre d'années restantes jusqu'à 18. La solution essentielle consiste à calculer N = 18 - âge et d'afficher 'vous etes majeur' si âge >= 18, sinon 'vous etes mineur ! il ne vous reste plus que N an(s)'. Il faut aussi assurer le bon format de saisie et l'affichage, par exemple en utilisant %i ou %ld et en ajoutant des retours à la ligne avec \n pour que le texte s'affiche correctement. D'autres proposent d'adapter la grammaire (an/ans) et d'envisager une extension facile pour d'autres seuils tout en évitant les messages redondants.

Généré automatiquement par IA
sur la base des meilleures réponses
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
Juste un truc en passant : mettre un \n à la fin du printf pour forcer l'affichage.
Et pas besoin d'un long pour un âge, un unsigned int voire un short suffit amplement.

oui yakari, mais la c juste pour l'exemple de la condition, et puis de nos jours, on est plus à l'octet près....
Non ???
Son programme, c'est pas non plus Windows 7 !

Au fait, %i, c'est pareil que %id, et ca marche aussi
1
yakari
 
Bonjour,

Pour ce genre de problème effectivement, on est pas à un octet près...
Mais si on veut faire de la programmation pour construire de plus gros projets, alors il faut quand même faire attention à ce que l'on déclare. De plus il peut arriver que l'on vienne à écrire des programmes pour des architectures autre que des Pc de bureau : les systèmes embarqués qui représentent en population, bien plus que les ordinateurs classiques.
Personnellement, je fais de la programmation embarquée et scientifique, dans le premier cas, je suis amené à travailler avec des architectures qui peuvent être réduite à environ 300 octets de RAM, et dans le second cas, en scientifique, il n'est pas rare d'allouer les nombres par paquets de centaines de milliers. En conclusion, à partir d'un certain niveau de difficultés dans les projets, il faut faire attention à ce que l'on alloue et ce que l'on libère : conclusion : autant prendre de bonnes habitudes dès le début ;)


Yakari
0
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
Au fait, %i, c'est pareil que %id, et ca marche aussi
%id ça ne marche pas. Et %ld ce n'est pas pareil que %i.
%i c'est pareil que %d. C'est tout. Si tu as une variable en long, tu dois mettre %li ou %ld.
En compilation stricte (respect des normes), tu recevras un avertissement à la compilation.
Cdlt
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
salut !

tu peux faire un simple

long reste = 18 - age;
if(reste > 0)
printf("Il ne te reste plus que %i ans avant d'être majeur", reste);

else if(reste <= 0)
printf("C bon tu es majeur !, trace ta route !");

met bien <= car si il a 18 il est maj !
0
vh_77 Messages postés 539 Statut Membre 2
 
tu as mi il ne te reste plus que %i
%i c'est quoi ?
0
yakari
 
Salut,

Juste un truc en passant : mettre un \n à la fin du printf pour forcer l'affichage.
Et pas besoin d'un long pour un âge, un unsigned int voire un short suffit amplement.

Yakari
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vh_77 Messages postés 539 Statut Membre 2
 
Bon bah voila c'est bon :
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
long age = 0;
printf ("quel age avez vous ? \n\n ");
scanf ("%ld", &age);
long reste = 18 - age;
if (reste > 0)
printf ("il ne te reste plus que %ld ans avant d etre majeur\n\n", reste);
else if (reste <= 0)
printf ("C bon \n\n");
system ("PAUSE");
return 0;
}
0
vh_77 Messages postés 539 Statut Membre 2
 
et id ces quoi car moi jutilise %ld ou %lf
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
desolé mais je ne saurai pas te repondre, je ne m'y connais pas assez pour te repondre...
0
vh_77 Messages postés 539 Statut Membre 2
 
comment tu ne peux pas savoir si tu utilises ?
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
je ne sais pas les differences, mais moi jutilise %i et ca marche tres bien...

sur le SDZ, il te dient %ld eh bien moi je fais %i... c une question d'habitude.

va voir le "man printf" dans google
0
vh_77 Messages postés 539 Statut Membre 2
 
bah je te remerci pour ta réponse d'avant.
Est-ce que tu as utiliser ta logique c'est a dire pour toi sa te sembler logique d'avoir fait 18 - age ?
et pas besoin de mettre else if (reste <= 0) car j'ai essayer sans et ça marche
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
Est-ce que tu as utiliser ta logique c'est a dire pour toi sa te sembler logique d'avoir fait 18 - age ?

comment ca ???

si tu t'inquietes de ne pas avoir les capacités, ne t'inquietes pas, c le debut !!!
tu ne feras pas un prog sans te poser une question, et te dire, "comment ca se fait ca ???
- j'ai fait ca
- j'ai fais ci
j'ai tout fais !

et non, tu n'as pas tout fais....

C'est l'habitude !

tu aurais pu te dire, tiens je vais faire un long switch

Tu aurais pu te dire, tiens je vais faire comme ca :

if(age == 1)
printf("il te reste 17 ans avant d'etre majeur")

if(age == 2)
printf("il te reste 16 ans avant d'etre majeur")

if(age == 3)
printf("il te reste 15 ans avant d'etre majeur")

if(age == 4)
printf("il te reste 14 ans avant d'etre majeur")

et puis ca fait pas pro, tu te dis tiens je vais faire un long switch !

et puis ca non plus ca va pas...

et tu te dis, tiens c un poil trop long.....
et si on raccourcicait ? Oui mais comment ? Et la tu reflechis, et tu trouves une nouvelle solution.

Désormais tu te dis, a chaque fois que j'ai ce probleme, je ferais comme ca.

je crois que c'est comme ca que j'ai ecris cette solution, je n'ai pas reflechit, c comme ca, quand g ce probleme, je fais ca...

Ca viendra tu verras !
0
vh_77 Messages postés 539 Statut Membre 2
 
t'es trop intelligent moi j'ai 16 ans 17 dans un mois et je trouve que je ne suis pas trop logique
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
T'es trop intelligent

celle la on me l'a jamais faite...

bon, encore une fois, c'est NORMAL !

depuis combien de temps apprends-tu ???
0
vh_77 Messages postés 539 Statut Membre 2
 
depuis hier et je ne comprend pas pourquoi tu as fais if (reste > 0) si tu pourrai mieux m'espliquer merci
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
en fait, le reste vaut 18 - age

il vaut donc un nombre, positif ou non.
negatif si lutilisateur a plus de 18 car 18 - 18 = 0; non ? et 18 - 19 = -1
positif si lutilisateur a moins de 18 car 18 - 6 = 12;

donc si l'utilisateur a 18 ou plus, reste vaudra 0 ou moins.
donc je teste si ce reste vaut + de 0
pour lui dire combien il lui reste.

si ce nombre est negatif ou egal a zero, il est majeur.

donc met bien if(reste > 0)
et if(reste <= 0)

compris ???
0
vh_77 Messages postés 539 Statut Membre 2
 
donc en faite il y a 2 condition une if pour dire a condition que le reste est plus grand que 0 celle la j'ai compris car exemple 18 - 10 = 8 donc plus grand que 0
et la deuxieme condition if pour dire reste plus petit ou egale c'est a dire 18 - 20 = -2 j'ai compris mais pourquoi le ou egale ?
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
il y a ou egal, car si il a 18, il est majeur, mais reste vaut 0; 18-18 !!
0
vh_77 Messages postés 539 Statut Membre 2
 
ha ok mes explication sont bonnes ?
0
HACKER 712 Messages postés 1463 Statut Contributeur 255
 
oui oui !

c bon, nhesite pas a menvoyer des mp si tu as des prob dans la suite du cours !

aplus
0
the F Messages postés 162 Statut Membre 13
 
Salut
* a propos du %d ca se compose de 3 parties :
= le % ca indique au programme (disons pour le moment !!!!!!!!!!!!) qu'il est entrain de manipuler une variable (remarque q'elle existe en printf est scanf )
=2é partie :ce qui est entre % et le type (d ou s ou f ....tu le saura qqe lignes en bes ) et c'est specifique à l'ecriture sur l'ecran et ca indique le nombre de cases reserves a cette variable
= 3é partie le format que son appelation differre entre les normes (ANSI ,C99,C89) ce sont des details avences que tu peut les negliger en tant que debutant

** Ensuite concernant les declarations "yakari" a parfaitement raison : il faut avoir les bonnes bases des le debut .... tu ne saisie pas la difference entre utiliser un int ou un short en ce stade ? C'EST PARFAITEMENT NORMAL Mais (keep it on mind ) ##je parle mal francais :-) #

***printf(" un bon programmeur est %d d'experience et %d de competences innes \n",100,1);

NB : TOUTE QUESTION EST LE BIENVENU (sur le mail personel dans le profil)
:-)
0
  • 1
  • 2
  • 3