cs_sebman
Messages postés37Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention11 décembre 2010
-
9 déc. 2010 à 11:22
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
11 déc. 2010 à 13:01
Bonjour à tous
Alors voilà, pour apprendre à programmer, j'ai pomper un code source que j'ai un peu modifier.
Le programme initial servait à convertir la différence entre 2 dates en jours en Années, Mois, Secondes,...
Le but du programme final est une sorte de planning.
Au lieux de travailler en hebdomadaire (5 jours ouvrables et un week-end), je travaille en régime cyclique à savoir que sur 6 jours j'en travaille 4, les 2 autres étant en repos, et cela indéfiniment.
J'ai modifier le programme initial en mettant un "modulo" sur la division de la difference entre les 2 dates converties en jours.
Le résultat me donne le numéro de jour lequel est converti en chaine de caractères
Lorsque je compile mon programme: (je suis sous linux)
/*
intialisation à la date
de naissance de Sacha
*/
time(&n);
naissance = localtime(&n);
/* naissance->tm_year = 100;
naissance->tm_mon = 1;// c'est bien en fait le mois de juin...
naissance->tm_mday = 1;
naissance->tm_hour = 8;
naissance->tm_min = 45;
naissance->tm_sec = 0;
*/
return 0;
}
// en heures
aH = (dif/(3600*24))%6;
if (aH < 0) aH = ceil(aH);
sprintf(nbS, "%'.0f", floor(aH));
gtk_label_set_text(GTK_LABEL(e[7]), nbS);
// en jours
aJ = dif/(3600*24);
if (aJ < 0) aJ = ceil(aJ);
sprintf(nbS, "%'.0f", floor(aJ));
gtk_label_set_text(GTK_LABEL(e[8]), nbS);
// en mois
aMo = (dif/(3600*24))%6;
switch (aMo)
{
case 0: {sprintf(NomVaccation,"Deuxieme nuit");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
case 1: {sprintf(NomVaccation,"Troisième nuit");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
case 2: {sprintf(NomVaccation,"Quatrieme nuit");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
case 3: {sprintf(NomVaccation,"Repos Légal");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
case 4: {sprintf(NomVaccation,"Repos Compensateur");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
case 5: {sprintf(NomVaccation,"Premiere Nuit");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
default: {sprintf(NomVaccation,"Erreur");
gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);}
}
// gtk_label_set_text(GTK_LABEL(e[9]),NomVaccation);
g_free(NomVaccation) ;
/*
gchar* sUtf8;
*/
/* Creation du label avec g_locale_to_utf8 */
/*
sUtf8 = g_locale_to_utf8("Texte à afficher", -1, NULL, NULL, NULL);
pLabel=gtk_label_new(sUtf8);
g_free(sUtf8);
*/
/* if (aMo < 0) aMo = ceil(aMo);
sprintf(nbS, "%'.0f", floor(aMo));
gtk_label_set_text(GTK_LABEL(e[9]), NomVaccation);
*/
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 9 déc. 2010 à 12:00
Ta fonction traitement est censé prendre un gpointer, or tu l'utilises et la déclare sans argument.
Je te conseille de mettre ton main tout en bas, en dessous des autres fonctions et ensuite retirer les déclarations de prototype qui ne sont pas obligatoire.
* Tu dois passer un gpointer à la fonction traitement donc: traitement(f) et non traitement().
* Tu fais un: sprintf(NomVaccation,"Deuxieme nuit"), mais NomVaccation est NULL ! Tu dois lui allouer de la mémoire.
* Ajoute les flags -W -Wall à ta ligne de compilation, tu auras plus de conseil (notamment tu verras les variables inutilisées...)
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 9 déc. 2010 à 13:03
Ben retire le g_free(NomVaccation).
Sinon tu essaies de libérer une ressource que tu n'as pas alloué toi même. D'ou l'erreur.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 10 déc. 2010 à 10:14
Et avec "gchar NomVaccation[20]" ?
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cs_sebman
Messages postés37Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention11 décembre 2010 9 déc. 2010 à 13:01
Tout dabord merci pour ta réponse bien rapide.
Je tiens à préciser que je suis très débutant en prog.
Alors j'ai rajouter un 'f' dans la fonction traitement
Et
gchar* NomVaccation[20];
Pour les variables inutilisés je verrai plus tard, merci pour tes conseils.
cs_sebman
Messages postés37Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention11 décembre 2010 10 déc. 2010 à 06:34
Alors la compilation à marché.
L'executable m'affiche bien une fenêtre, mais affiche "erreur" quelques soit le numéro de jour (variable ahH et aJ)
Au vu des erreurs de compilation, j'ai du faire une faute sur:
gtk_label_set_text
$ gcc `pkg-config --libs --cflags gtk+-2.0` age.c -o ageage.c: In function ‘traitement’:
age.c:333: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:334: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
age.c:335: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:336: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
age.c:337: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:338: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
age.c:339: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:340: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
age.c:341: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:342: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
age.c:343: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:344: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
age.c:345: warning: passing argument 1 of ‘sprintf’ from incompatible pointer type
/usr/include/stdio.h:341: note: expected ‘char * __restrict__’ but argument is of type ‘gchar **’
age.c:346: warning: passing argument 2 of ‘gtk_label_set_text’ from incompatible pointer type
/usr/include/gtk-2.0/gtk/gtklabel.h:112: note: expected ‘const gchar *’ but argument is of type ‘gchar **’
alors jai changé:
gchar* NomVaccation[20];
par
char NomVaccation[20];
Alors plus d'erreur lors de la compilation
La fenêtre s'ouvre, mais ma variable NomVaccation reste sur Erreur soit sur le "default:" du switch
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 10 déc. 2010 à 14:29
Il te manque les "break" dans ton switch, tout simplement :p
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 11 déc. 2010 à 13:01
De même ! Bonne continuation :)
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question