Problemes avec fonction
geni
-
mype Messages postés 2449 Statut Membre -
mype Messages postés 2449 Statut Membre -
Bonjour,
Je dois faire :
Description:
Écrire un programme C qui permet de dessiner un des chiffres, décrits plus loin, et choisi dans un menu interactif présentant différentes options.
Chiffres à dessiner
Chiffre 0 Chiffre 7
***** *****
* * *
* * *
* * *
***** *
Le programme doit :
• afficher le menu suivant : Menu
O : chiffre 0
S : chiffre 7
Q : quitter
• permettre à l’usager de faire le choix du chiffre à dessiner
• valider le choix de l’usager et lui permettre d'entrer le bon choix
• demander à l’usager de fournir la hauteur du chiffre (nombre de lignes et de colonnes du dessin)
• valider les données (hauteur comprise entre 5 et 11 et impaire)
• permettre à l’usager de recommencer en cas d’erreurs (fournir une autre hauteur)
• permettre à l’usager de faire d’autres dessins (les mêmes chiffres évidement)
• quitter le programme avec l’option Q
c'est la première fois que je programme avec des fonctions...
ça ne fonctionne pas, quelqu'un peut m'aider?
voila mon programme:
/* T.p.2 Numero 2
*/
#include <stdio.h>
#include <ctype.h>
//Fonctions
void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu
// Lire choix
char lirechoix (int O, int S, int Q, int choix){
do
{
printf(" Entrer votre choix : ");
scanf("%c", &choix);
}
while ( choix !=O || choix !=S || choix !=Q);
return 'Q' ;
}
// Fin lire choix
// Lire hauteur
void lirehauteur(int min=5, int max=11, int hauteur) {
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", hauteur);
}
while ( hauteur < min && hauteur > max );
return '0';
}
//fin lire hauteur
//Dessiner le chiffre 0
void dessiner0 (int hauteur, i) {
for(i=0;i<5;i++)
printf("*");
printf("\n");
for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }
for(i=0;i<5;i++)
printf("*");
printf("\n");
}
// Fin dessiner le chiffre0
//Dessiner le chiffre7
void dessiner7 (int hauteur, u){
for(hauteur=0;hauteur<5;hauteur++)
printf ("*");
printf ("\n");
for (hauteur =1; hauteur<=4; hauteur++)
{
for (u=1; u <=4; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7
// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause
//fonction principale
void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre
do
{
afficherMenu();
choix = lireChoix();
if ( choix != 'Q' )
{
hauteur = lireHauteur( 5, 11);
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');
fairePause();
} // fin main
Je dois faire :
Description:
Écrire un programme C qui permet de dessiner un des chiffres, décrits plus loin, et choisi dans un menu interactif présentant différentes options.
Chiffres à dessiner
Chiffre 0 Chiffre 7
***** *****
* * *
* * *
* * *
***** *
Le programme doit :
• afficher le menu suivant : Menu
O : chiffre 0
S : chiffre 7
Q : quitter
• permettre à l’usager de faire le choix du chiffre à dessiner
• valider le choix de l’usager et lui permettre d'entrer le bon choix
• demander à l’usager de fournir la hauteur du chiffre (nombre de lignes et de colonnes du dessin)
• valider les données (hauteur comprise entre 5 et 11 et impaire)
• permettre à l’usager de recommencer en cas d’erreurs (fournir une autre hauteur)
• permettre à l’usager de faire d’autres dessins (les mêmes chiffres évidement)
• quitter le programme avec l’option Q
c'est la première fois que je programme avec des fonctions...
ça ne fonctionne pas, quelqu'un peut m'aider?
voila mon programme:
/* T.p.2 Numero 2
*/
#include <stdio.h>
#include <ctype.h>
//Fonctions
void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu
// Lire choix
char lirechoix (int O, int S, int Q, int choix){
do
{
printf(" Entrer votre choix : ");
scanf("%c", &choix);
}
while ( choix !=O || choix !=S || choix !=Q);
return 'Q' ;
}
// Fin lire choix
// Lire hauteur
void lirehauteur(int min=5, int max=11, int hauteur) {
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", hauteur);
}
while ( hauteur < min && hauteur > max );
return '0';
}
//fin lire hauteur
//Dessiner le chiffre 0
void dessiner0 (int hauteur, i) {
for(i=0;i<5;i++)
printf("*");
printf("\n");
for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }
for(i=0;i<5;i++)
printf("*");
printf("\n");
}
// Fin dessiner le chiffre0
//Dessiner le chiffre7
void dessiner7 (int hauteur, u){
for(hauteur=0;hauteur<5;hauteur++)
printf ("*");
printf ("\n");
for (hauteur =1; hauteur<=4; hauteur++)
{
for (u=1; u <=4; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7
// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause
//fonction principale
void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre
do
{
afficherMenu();
choix = lireChoix();
if ( choix != 'Q' )
{
hauteur = lireHauteur( 5, 11);
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');
fairePause();
} // fin main
A voir également:
- Problemes avec fonction
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
7 réponses
Bonjour
Effectivement, il y a un certain nombre d'erreurs !
Commençons par le commencement : ça ne fonctionne pas : tu peux préciser ? En particulier les messages d'erreurs que te sort le compilateur, car il doit en sortir. Tu obtiendras une meilleure aide si tu donnes plus de renseignements.
Effectivement, il y a un certain nombre d'erreurs !
Commençons par le commencement : ça ne fonctionne pas : tu peux préciser ? En particulier les messages d'erreurs que te sort le compilateur, car il doit en sortir. Tu obtiendras une meilleure aide si tu donnes plus de renseignements.
Utilise le copier-coller, ça évitera les fautes de frappe...
1 ere erreur : ligne 34
void lirehauteur(int min=5, int max=11, int hauteur)
Relis ton manuel de C, le paragraphe sur la définition des fonctions. Tu n'as pas le droit d'initialiser les paramètres dans la définition d'une fonction
D'où les erreurs des lignes 38 et 40
Le message d'erreur de la ligne 41 est assez explicite : tu retournes une valeur alors que tu as déclaré la fonction void, c'est incohérent !
Au passage, il ne t'a pas sorti d'erreur de compilation, mais tu as un plantage assuré à l'exécution sur le scanf("%d", hauteur);, vérifie BIEN l'utilisation de scanf : &hauteur et non pas hauteur
Je ne vais pas prendre les erreurs une par une. Je suis sûr que tu peux en corriger la plupart toi-même en te donnant la peine de chercher à comprendre ce que veulent dire les messages d'erreur (ils ne sont pas là pour rien) et en n'hésitant pas à vérifier dans ton manuel de référence du C dès que tu as un doute.
Ne te décourage pas, même si le nombre d'erreurs peut te faire peur, il y a quand même beaucoup de bonnes choses dans ce que tu as fait. A commencer par le mérite de l'avoir fait.
1 ere erreur : ligne 34
void lirehauteur(int min=5, int max=11, int hauteur)
Relis ton manuel de C, le paragraphe sur la définition des fonctions. Tu n'as pas le droit d'initialiser les paramètres dans la définition d'une fonction
D'où les erreurs des lignes 38 et 40
Le message d'erreur de la ligne 41 est assez explicite : tu retournes une valeur alors que tu as déclaré la fonction void, c'est incohérent !
Au passage, il ne t'a pas sorti d'erreur de compilation, mais tu as un plantage assuré à l'exécution sur le scanf("%d", hauteur);, vérifie BIEN l'utilisation de scanf : &hauteur et non pas hauteur
Je ne vais pas prendre les erreurs une par une. Je suis sûr que tu peux en corriger la plupart toi-même en te donnant la peine de chercher à comprendre ce que veulent dire les messages d'erreur (ils ne sont pas là pour rien) et en n'hésitant pas à vérifier dans ton manuel de référence du C dès que tu as un doute.
Ne te décourage pas, même si le nombre d'erreurs peut te faire peur, il y a quand même beaucoup de bonnes choses dans ce que tu as fait. A commencer par le mérite de l'avoir fait.
dans tes fonctions dessiner tu as mis deux parametres
et quand tu fait l'appel tu ne leur passe que la hauteur
tu pourrais enlever u et i dans les parametres et les déclaré a l'interieur des fontions
void dessiner7(int hauteur, u) void dessiner0(int hauteur, i)
et quand tu fait l'appel tu ne leur passe que la hauteur
tu pourrais enlever u et i dans les parametres et les déclaré a l'interieur des fontions
int u;et
int i;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
/* T.p.2 Numero 2
* Genevieve Henault
* HENG04628608
*/
#include <stdio.h>
#include <ctype.h>
//Fonctions
void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu
// Lire choix
char lirechoix (){
int O,S,Q,choix;
do
{
printf(" Entrer votre choix : ");
scanf("%c", &choix);
}
while ( choix !=O || choix !=S || choix !=Q);
return 'Q' ;
}
// Fin lire choix
// Lire hauteur
void lirehauteur() {
int min,max,hauteur;
min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min && hauteur > max );
return ;
}
//fin lire hauteur
//Dessiner le chiffre 0
void dessiner0 (int hauteur) {
int i;
for(i=0;i<5;i++)
printf("*");
printf("\n");
for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }
for(i=0;i<5;i++)
printf("*");
printf("\n");
}
// Fin dessiner le chiffre0
//Dessiner le chiffre7
void dessiner7 (int hauteur){
int u;
for(hauteur=0;hauteur<5;hauteur++)
printf ("*");
printf ("\n");
for (hauteur =1; hauteur<=4; hauteur++)
{
for (u=1; u <=4; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7
// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause
//fonction principale
void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre
do
{
afficherMenu();
choix = lirechoix();
if ( choix != 'Q' )
{
hauteur = lirehauteur(5, 11);
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');
fairePause();
} // fin main
* Genevieve Henault
* HENG04628608
*/
#include <stdio.h>
#include <ctype.h>
//Fonctions
void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu
// Lire choix
char lirechoix (){
int O,S,Q,choix;
do
{
printf(" Entrer votre choix : ");
scanf("%c", &choix);
}
while ( choix !=O || choix !=S || choix !=Q);
return 'Q' ;
}
// Fin lire choix
// Lire hauteur
void lirehauteur() {
int min,max,hauteur;
min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min && hauteur > max );
return ;
}
//fin lire hauteur
//Dessiner le chiffre 0
void dessiner0 (int hauteur) {
int i;
for(i=0;i<5;i++)
printf("*");
printf("\n");
for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }
for(i=0;i<5;i++)
printf("*");
printf("\n");
}
// Fin dessiner le chiffre0
//Dessiner le chiffre7
void dessiner7 (int hauteur){
int u;
for(hauteur=0;hauteur<5;hauteur++)
printf ("*");
printf ("\n");
for (hauteur =1; hauteur<=4; hauteur++)
{
for (u=1; u <=4; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7
// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause
//fonction principale
void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre
do
{
afficherMenu();
choix = lirechoix();
if ( choix != 'Q' )
{
hauteur = lirehauteur(5, 11);
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');
fairePause();
} // fin main
c'est parce que tu donnes a hauteur la valeur de la fonction lirehauteur alors qu'elle ne renvoie rien de plus lors de l'appel tu as oublié d'enlever les parametres
donc il te faut changer l'en tete de la fonction lirehauteur
donc il te faut changer l'en tete de la fonction lirehauteur
int lirehauteur()et a la fin de la fonction n'oublie pas de retourner la hauteur
return hauteur;et pour l'appel tu enleves aussi les parametres
hauteur = lirehauteur();
Voila mon programme fonctionne (merci mille fois), mais quand je le test, peu importe le choix que je fais,
il me redemande toujours d'entrer mon choix...
Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix : o
Entrez votre choix :
Entrez votre choix : O
Entrez votre choix :
Entrez votre choix : S
Entrez votre choix :
Entrez votre choix : Q
Entrez votre choix :
Entrez votre choix :
programme:
/* T.p.2 Numero 2
* Genevieve Henault
* HENG04628608
*/
#include <stdio.h>
#include <ctype.h>
//Fonctions
void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu
// Lire choix
char lirechoix (){
int O,S,Q,choix;
do
{
printf(" \nEntrez votre choix : ");
scanf("%c", &choix);
}
while ( choix !=O || choix !=S || choix !=Q);
return ' ';
}
// Fin lire choix
// Lire hauteur
int lirehauteur() {
int min,max,hauteur;
min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min && hauteur > max );
return hauteur ;
}
//fin lire hauteur
//Dessiner le chiffre 0
void dessiner0 (int hauteur) {
int i;
for(i=0;i<5;i++)
printf("*");
printf("\n");
for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }
for(i=0;i<5;i++)
printf("*");
printf("\n");
}
// Fin dessiner le chiffre0
//Dessiner le chiffre7
void dessiner7 (int hauteur){
int u;
for(hauteur=0;hauteur<5;hauteur++)
printf ("*");
printf ("\n");
for (hauteur =1; hauteur<=4; hauteur++)
{
for (u=1; u <=4; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7
// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause
//fonction principale
void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre
do
{
afficherMenu();
choix = lirechoix();
if ( choix != 'Q' )
{
hauteur = lirehauteur();
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');
fairepause();
} // fin main
il me redemande toujours d'entrer mon choix...
Menu
O : Chiffre 0
S : Chiffre 7
Q : Quitter
Entrez votre choix : o
Entrez votre choix :
Entrez votre choix : O
Entrez votre choix :
Entrez votre choix : S
Entrez votre choix :
Entrez votre choix : Q
Entrez votre choix :
Entrez votre choix :
programme:
/* T.p.2 Numero 2
* Genevieve Henault
* HENG04628608
*/
#include <stdio.h>
#include <ctype.h>
//Fonctions
void afficherMenu ()
{
printf ("Menu");
printf ("\n O : Chiffre 0");
printf ("\n S : Chiffre 7");
printf ("\n Q : Quitter");
}
// Fin afficher menu
// Lire choix
char lirechoix (){
int O,S,Q,choix;
do
{
printf(" \nEntrez votre choix : ");
scanf("%c", &choix);
}
while ( choix !=O || choix !=S || choix !=Q);
return ' ';
}
// Fin lire choix
// Lire hauteur
int lirehauteur() {
int min,max,hauteur;
min=5;
max=11;
do
{
printf(" Entrez la hauteur du chiffre : ");
scanf("%d", &hauteur);
}
while ( hauteur < min && hauteur > max );
return hauteur ;
}
//fin lire hauteur
//Dessiner le chiffre 0
void dessiner0 (int hauteur) {
int i;
for(i=0;i<5;i++)
printf("*");
printf("\n");
for ( hauteur=0; hauteur<4; hauteur++) {
printf ("* *");
printf("\n"); }
for(i=0;i<5;i++)
printf("*");
printf("\n");
}
// Fin dessiner le chiffre0
//Dessiner le chiffre7
void dessiner7 (int hauteur){
int u;
for(hauteur=0;hauteur<5;hauteur++)
printf ("*");
printf ("\n");
for (hauteur =1; hauteur<=4; hauteur++)
{
for (u=1; u <=4; u++)
{
if (u+hauteur==5)
printf ("*");
else
printf (" ");
}
printf ("\n");
}
}
// Fin dessiner le chiffre 7
// Faire une pause
void fairepause ()
{
printf ("\n Appuyer sur une touche pour continuer");
getch();
}
// Fin de faire une pause
//fonction principale
void main()
{
char choix; // choix de l'usager
int hauteur; // hauteur de la lettre
do
{
afficherMenu();
choix = lirechoix();
if ( choix != 'Q' )
{
hauteur = lirehauteur();
switch (choix)
{
case '0' : dessiner0(hauteur); break;
case 'S' : dessiner7(hauteur); break;
}// fin switch
} // fin if
}// fin while
while (choix != 'Q');
fairepause();
} // fin main
ta boucle n'est pas bonne tu dois remplacer les || par des &&
de plus tes variables sont des caracteres et non des entiers
enfin tu as oubliés de retourner le choix a la fin
de plus tes variables sont des caracteres et non des entiers
enfin tu as oubliés de retourner le choix a la fin
char lirechoix (){
char O,S,Q,choix;
do
{
printf(" \nEntrez votre choix : ");
scanf("%c", &choix);
}
while ( choix !='O' && choix !='S' && choix !='Q');
return choix;
}
ligne message
34 syntax errore before '=' token
in function 'lirehauteur'
38 'hauteur' undeclared ...
40 'min' undeclared...
40 'max undeclared'
41 warning 'return' with a valeu, in fonction returning void
47 syntax error before 'i'
in function 'dessiner0'
49 'i' undeclared
54 'hauteur' undeclared
67 syntax error before 'u'
in function 'dessiner7'
69 'hauteur' undeclared
74 'u' undeclared