Les arguments heures et minutes ont les valeurs 0 et 90,comment l'affectation se déroule dans le block de la fonction decoupeMinutes ?? Pourquoi lors de l'exucution de la fonction la valeur de heures =1 et minutes =30;
#include <stdio.h>
#include <stdlib.h>
/* Je mets le prototype en haut. Comme c'est un tout
petit programme je ne le mets pas dans un .h, mais
en temps normal (dans un vrai programme), j'aurais placé
le prototype dans un fichier .h bien entendu */
void decoupeMinutes(int heures, int minutes);
int main(int argc, char *argv[])
{
int heures = 0, minutes = 90;
/* On a une variable minutes qui vaut 90.
Après appel de la fonction, je veux que ma variable
"heures" vaille 1 et que ma variable "minutes" vaille 30 */
decoupeMinutes(heures, minutes);
printf("%d heures et %d minutes", heures, minutes);
return 0;
}
void decoupeMinutes(int heures, int minutes)
{
heures = minutes / 60; // 90 / 60 = 1
minutes = minutes % 60; // 90 % 60 = 30
}
Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?
La portée des variables. Les variables heures et minutes de ton main et celles de ta fonction ne sont pas les mêmes variables.
Si tu veux modifier la valeur d'une variable d'une fonction depuis une autre fonction, tu n'y parviendra qu'à laide des pointeurs. Comme l'a dit PierrotLeFou tu devrais revoir ce chapitre
/* Je mets le prototype en haut. Comme c'est un tout
petit programme je ne le mets pas dans un .h, mais
en temps normal (dans un vrai programme), j'aurais placé
le prototype dans un fichier .h bien entendu */
C'est pas comme ça que ça marche. On ne découpe pas "parce qu'il faut faire comme ça dans un vrai programme". On découpe quand il y a besoin de découper, avec des morceaux récupérables dans d'autres programmes.
L'exemple est mal choisi (et le cours est mal foutu).
D'abord, quand on veut écrire une fonction qui réalise un calcul, il faut avoir une spécification de ce qu'on veut qu'elle fasse.
Ici, on croit comprendre qu'il s'agit, partant d'un nombre de minutes, de voir combien ça fait d'heures et de minutes. Par exemple, 95 minutes, ça doit donner 1h et 35 minutes.
Une solution propre, ça serait de dire que la fonction prend des minutes en paramètres, et retourne des heures et minutes. De là à dire que ça les retourne dans une structure, il n'y a qu'un pas
struct Duree {
int heures;
int minutes;
};
/**
* Retourne le découpage d'un temps.
*
* \param minutes durée en minutes
* \return structure contenant les heures et minutes
*/
int main() {
struct Duree d = decoupage(95);
printf("%d h et %d m\n", d.heures, d.minutes);
}
Ah mais zut, ça ne nous fait pas le passage d'adresse :-)
Donc autre idée : une fonction à qui on donne un temps en minutes, et qui REMPLIT une structure avec le temps découpé etc. Pas de passage par référence en C, on contourne donc en passant une adresse
Ca s'utilisera comme ça
int main() {
struct Duree d;
decouper(95, &d);
printf("%d h et %d m\n", d.heures, d.minutes);
}
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.