Langage C
Résolu/Fermé
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
-
31 oct. 2008 à 12:26
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 nov. 2008 à 08:38
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 nov. 2008 à 08:38
A voir également:
- Langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Débuter langage batch windows - Guide
8 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
31 oct. 2008 à 13:48
31 oct. 2008 à 13:48
Salut,
Tu as fait plein de petites erreurs.
Je t'ai corrigé ton programme. Compare bien les différences entre les versions et n'hésite pas à poser des questions si tu ne comprends pas.
Cdlt
Tu as fait plein de petites erreurs.
Je t'ai corrigé ton programme. Compare bien les différences entre les versions et n'hésite pas à poser des questions si tu ne comprends pas.
#include<stdio.h> #include<stdlib.h> int main (void) { int duree,age; float forfhor,rem,tariftot; char rep[3]; do { printf("\nSaisir l'âge du client : "); scanf("%d",&age); printf("\nSaisir la durée : "); scanf("%d",&duree); switch (duree) { case 30: forfhor=7.5; break; case 60: forfhor=12.5; break; case 120: forfhor=21.5; break; default: forfhor=0; } if (age<15) { rem=forfhor*0.4; } else if (age<18) { rem=forfhor*0.3; } else if (age<26) { rem=forfhor*0.2; } else { rem=0; } tariftot=forfhor-rem; printf("\nVotre client doit payer %f : Euros",tariftot); printf("\nSouhaitez-vous calculer le prix pour un autre client (O/N)?"); while(getchar()!='\n'); fgets(rep,sizeof(rep),stdin); } while (rep[0]=='o'); return 0; }
Cdlt
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
2
31 oct. 2008 à 15:01
31 oct. 2008 à 15:01
Merci pour ton aide, j'ai remarquée deux grosse différence par rapport au mien, la première concerne le swtich et j'ai tout compris car je viens de lire dans mon livre de langage C les explications pour cette instruction par contre je ne comprend pas du tout la fin de ton code donc si tu pouvais m'expliquer cela serait très gentil merci par avance et encore merci de m'avoir déjà aidé.
A partir de là je ne comprend plus :
while(getchar()!='\n');
fgets(rep,sizeof(rep),stdin);
} while (rep[0]=='o');
return 0;
}
je ne comprend pas aussi quand tu déclare le caractère rep pourquoi tu fais : char rep[3]; ?
Merci
A partir de là je ne comprend plus :
while(getchar()!='\n');
fgets(rep,sizeof(rep),stdin);
} while (rep[0]=='o');
return 0;
}
je ne comprend pas aussi quand tu déclare le caractère rep pourquoi tu fais : char rep[3]; ?
Merci
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
31 oct. 2008 à 15:19
31 oct. 2008 à 15:19
while(getchar()!='\n');
Lorsque tu appuies sur la touche entrée, les caractère '\n' a tendant à se mettre dans le buffer clavier.
Et lorsque tu utilises ton scanf("%c"), le '\n' sort du buffer pour se répondre au scanf. Du coup l'astuce consiste à vider le buffer clavier. Normalement while(c=getchar()!='\n' && c!=EOF); mais dans ce cas l'EOF n'est pas très très utile.
fgets(rep,sizeof(rep),stdin);
Même problème encore, le '\n' se mettra dans le buffer, donc je préconise l'utilisation d'un tableau avec fgets de trois cases (une case pour le caractère O ou N, une deuxième pour le '\n' et le troisième pour '\0' (fin de chaîne), (obligatoire pour éviter les débordement en lecture).
Lorsque tu appuies sur la touche entrée, les caractère '\n' a tendant à se mettre dans le buffer clavier.
Et lorsque tu utilises ton scanf("%c"), le '\n' sort du buffer pour se répondre au scanf. Du coup l'astuce consiste à vider le buffer clavier. Normalement while(c=getchar()!='\n' && c!=EOF); mais dans ce cas l'EOF n'est pas très très utile.
fgets(rep,sizeof(rep),stdin);
Même problème encore, le '\n' se mettra dans le buffer, donc je préconise l'utilisation d'un tableau avec fgets de trois cases (une case pour le caractère O ou N, une deuxième pour le '\n' et le troisième pour '\0' (fin de chaîne), (obligatoire pour éviter les débordement en lecture).
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
2
31 oct. 2008 à 15:28
31 oct. 2008 à 15:28
oki je vois ce que tu veux dire merci bien, par contre aurait tu une solution sans passer par là car nous l'avons pas encore vu ? Si tu n'en a pas ce n'est pas grave, encore merci pour ton aide !!!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
31 oct. 2008 à 15:43
31 oct. 2008 à 15:43
Bon si tu débutes, je te conseille alors d'éviter l'utilisation de scanf("%c").
Tu peux à la place utiliser printf("taper 1 pour continuer "); Avec des chiffres, t'auras pas de souci.
Tu peux à la place utiliser printf("taper 1 pour continuer "); Avec des chiffres, t'auras pas de souci.
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
2
31 oct. 2008 à 15:53
31 oct. 2008 à 15:53
merci bien c'est très sympa de ta part.
je vais peut etre t'énervé mais je dois faire pas mal de faute de débutant là j'ai un autre programme a compiler et enfaite il affiche pas du tout ce que je voudrais, je crois que mon gros souci est sur l'affichage donc si tu peux encore m'aider si tu ne peux pas tant pis et je te le dit tout de suite après celui là j'en ai encore deux je voudrais arriver a tout trouver tout seul mais si je n'y arrive pas est ce que je pourrais te recontacte ?
je te laisse celui qui a un petit problème d'affichage :
#include<stdio.h>
int main(void)
{
int note, min, max, cptmin,cptmax;
printf("\nDonnez une note (-1 pour finir)");
if (note != 1)
{
min = note;
max = note;
cptmin = 0;
cptmax = 0;
while (note != -1)
{
if (note < min)
{
min = note;
cptmin = 1;
}
else if (note = min)
{
cptmin = cptmin++;
}
if (note > max)
{
max = note;
cptmax = 1;
}
else if (note = max)
{
cptmax = cptmax++;
}
printf("\nDonnez une note (-1 pour finir)");
scanf("%d",¬e);
}
printf("\nNote maximale %d : attribuée %d fois",max,cptmax);
printf("\nNote minimale %d : attribuée %d fois",min,cptmin);
printf("\nPas de note saisie !");
}
je vais peut etre t'énervé mais je dois faire pas mal de faute de débutant là j'ai un autre programme a compiler et enfaite il affiche pas du tout ce que je voudrais, je crois que mon gros souci est sur l'affichage donc si tu peux encore m'aider si tu ne peux pas tant pis et je te le dit tout de suite après celui là j'en ai encore deux je voudrais arriver a tout trouver tout seul mais si je n'y arrive pas est ce que je pourrais te recontacte ?
je te laisse celui qui a un petit problème d'affichage :
#include<stdio.h>
int main(void)
{
int note, min, max, cptmin,cptmax;
printf("\nDonnez une note (-1 pour finir)");
if (note != 1)
{
min = note;
max = note;
cptmin = 0;
cptmax = 0;
while (note != -1)
{
if (note < min)
{
min = note;
cptmin = 1;
}
else if (note = min)
{
cptmin = cptmin++;
}
if (note > max)
{
max = note;
cptmax = 1;
}
else if (note = max)
{
cptmax = cptmax++;
}
printf("\nDonnez une note (-1 pour finir)");
scanf("%d",¬e);
}
printf("\nNote maximale %d : attribuée %d fois",max,cptmax);
printf("\nNote minimale %d : attribuée %d fois",min,cptmin);
printf("\nPas de note saisie !");
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
2
31 oct. 2008 à 16:03
31 oct. 2008 à 16:03
Comment il faut faire pour traduire en C :
si suite mod 2 =0 alors ....?
Merci d'avance !!!
si suite mod 2 =0 alors ....?
Merci d'avance !!!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
31 oct. 2008 à 16:14
31 oct. 2008 à 16:14
A priori tu n'as pas regardé attentivement mon programme. Sinon t'aurais évité quelques fautes.
Quand on compare en C, c'est == et non =.
Le simple = sert à initialiser une variable.
Donc, on fait if(a==1) par exemple.
Ensuite : on ne fait pas cptmax=cptmax++ mais un simple cptmax++;
cptmax++; est l'équivalent de cptmax+=1; ou encore cptmax=cptmax+1;
Tu fais un int main(void), n'oublie donc pas de faire return 0; à la fin.
Sinon pour répondre à ta question, si suite mod 2 =0 alors ....?
Tu fais if(suite%2==0) { ... }
Quand on compare en C, c'est == et non =.
Le simple = sert à initialiser une variable.
Donc, on fait if(a==1) par exemple.
Ensuite : on ne fait pas cptmax=cptmax++ mais un simple cptmax++;
cptmax++; est l'équivalent de cptmax+=1; ou encore cptmax=cptmax+1;
Tu fais un int main(void), n'oublie donc pas de faire return 0; à la fin.
Sinon pour répondre à ta question, si suite mod 2 =0 alors ....?
Tu fais if(suite%2==0) { ... }
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
2
31 oct. 2008 à 16:29
31 oct. 2008 à 16:29
j'ai suivi tout tes conseil et tout marche bien pour le programme précédent mais celui avec le modulo il me marque erreur de segmentation une fois que j'ai saisi ma valeur qu'est ce que cela veut dire ?
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int bit, suite, cpt;
suite = 0;
for(cpt=1; cpt<=7; cpt++)
{
printf("\nSaisir une valeur binaire");
scanf("%d",bit);
while(bit < 0 || bit > 1)
{
printf("\nBit saisi invalide");
scanf("%d",bit);
}
suite++;
}
if (suite%2==0)
{
printf("\nSuite saisie paire, bit de parité égal à 0");
}
else
{
printf("\nSuite saisie impaire, bit de parité égal à 1");
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int bit, suite, cpt;
suite = 0;
for(cpt=1; cpt<=7; cpt++)
{
printf("\nSaisir une valeur binaire");
scanf("%d",bit);
while(bit < 0 || bit > 1)
{
printf("\nBit saisi invalide");
scanf("%d",bit);
}
suite++;
}
if (suite%2==0)
{
printf("\nSuite saisie paire, bit de parité égal à 0");
}
else
{
printf("\nSuite saisie impaire, bit de parité égal à 1");
}
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
31 oct. 2008 à 16:58
31 oct. 2008 à 16:58
Salut
Lorsque tu fais un scanf, il ne faut pas oublier de passer l'adresse de la variable.
int bit;
scanf("%d",&bit);
Si t'oublies, l'esperluette, la variable ne sera pas modifiée.
Lorsque tu fais un scanf, il ne faut pas oublier de passer l'adresse de la variable.
int bit;
scanf("%d",&bit);
Si t'oublies, l'esperluette, la variable ne sera pas modifiée.
cool-roots
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
1 novembre 2008
15
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 nov. 2008 à 03:15
1 nov. 2008 à 03:15
bonjours j ai aussi besoin de ton aide et de ta gentilesse
voila ca compilation ok mais ne fonctione pas sur le pc (probleme compabilite ou ereur de programation)
dev-c++ vista
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long age=0;
printf("quel age as tu ?\n");
scanf("%ld",age);
if(age>=18)
{
printf("tu est majeur\n");
}
else
{
printf("tu nes pas majeur\n");
}
system("PAUSE");
return 0;
}
voila ca compilation ok mais ne fonctione pas sur le pc (probleme compabilite ou ereur de programation)
dev-c++ vista
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long age=0;
printf("quel age as tu ?\n");
scanf("%ld",age);
if(age>=18)
{
printf("tu est majeur\n");
}
else
{
printf("tu nes pas majeur\n");
}
system("PAUSE");
return 0;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
>
cool-roots
Messages postés
22
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
1 novembre 2008
1 nov. 2008 à 08:38
1 nov. 2008 à 08:38
Tu réponds à mon message 10, qui contient la réponse !
rafale69300
Messages postés
84
Date d'inscription
vendredi 31 octobre 2008
Statut
Membre
Dernière intervention
15 juin 2010
2
31 oct. 2008 à 17:21
31 oct. 2008 à 17:21
merci pour ton aide tout au long de l'aprem maintenant tous les algo que j'avais à mettre en C marche merci bien bonne continuation !!!