1

Bonjour,
je suis assez newbie en C et j'ai l'habitude de faire des programmes consoles avec les bon vieux printf et scanf. Seulement voila, lorsque je déclare une variable double et qu'ensuite je fais un prompt pour modifier sa valeur, tigcc me dit qu'il ne connait pas %lf, un bout de code pour mieux comprendre :

{
double variable = 0;

printf ("entrez la valeur");
scanf ("%lf", &variable);
printf ("votre valeur est %lf", variable);

}

Or ce code ne marche pas dans tigcc... (bien sûr j'ai tous les headers qu'il faut -.-' dans mon vrai code).
Que dois-je faire pour pouvoir modifier mes variables comme avec un scanf ?

Merci d'avance ;P

2

1. Tous les types de flottants (float, double, long double) sont identiques dans TIGCC, donc %f suffit.
2. Mais %lf est aussi accepté, donc le warning est incorrect (bogue du portage de GCC, je mets ça sur mon TODO), ton code est bon.
3. Mais je déconseille fortement l'utilisation de scanf pour un tel exemple (utilise plutôt getsn et atof), parce que scanf prend 1,5 KO et que tu es très loin d'utiliser toutes les fonctionnalités de cette fonction!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

OK,
merci d'avoir répondu si vite c'est sympa. Oui, tu as sans doute raison cela fait plusieurs fois que j'entend que le scanf est à bannir de ce genre de code... je vais me pencher sur atof et getsn ;P
Néanmoins j'ai noté un truc étrange, ce code la fonctionne :

#include <stdio.h>
#include <tigcclib.h>

void _main(void)
{
clrscr();
float age =2.5;
printf("quel age as tu ?");
scanf ("%lf", &age);
printf("\n\nTu as %f ans", age);
ngetchx();
}

Alors que si on remplace %f par %lf dans la ligne printf comme ceci :
printf ("tu as%lf ans" age);
le debogueur renvoit une erreur .

Enfin ce n'est pas très important, c'est juste dommage qu'un code qui marche avec gcc ne marche pas avec tigcc, de toutes facon je vais pas mettre de scanf mon problème est donc réglé merci !




4

Parce que TIGCC a des extensions particulières pour les *scanf et *printf (propre à TI, qui implémente sprintf dans AMS).

5

printf utilise une fonction de AMS pour afficher les double, si cette fonction ne gère pas %lf, nous ne pouvons rien y faire. Et du coup le warning de GCC est correct, parce qu'il porte sur le printf, pas sur le scanf (fonction que j'ai écrite et qui accepte %lf).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

On pourrait sinon implémenter un printf dans tigcclib qui traiterait les cas où le format est %lf et qui appellerait la fonction d'AMS sinon.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

7

J'ai déjà examiné cette possibilité pour les %lld (long long), le problème est que ça prend beaucoup de place, on ne gagne presque rien par rapport à tout réimplémenter, et donc la taille serait comparable avec celle de scanf (1,5 KO).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Ah ouais, ok...
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »