Probleme printf C

Fermé
Looser - 15 août 2009 à 01:16
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 août 2009 à 11:38
Bonjour,
j'ai un probleme avec mon code en c il ne veut pas affiche apres un scanf (c'est un programme con,sole) :
et ej voudrai savoir si on puvais mettre de la couleur en c

#include <stdio.h>
#include <stdlib.h>

int main()
{
float chiffre3 = 0.0;
float chiffre2 = 0.0;
int client = 0;
int menu = 0;
char nomdeentreprise [50] ;
float chiffre = 0.0;
FILE* nomentreprise = NULL;
FILE* ajchiffre=NULL;
FILE*chiffre1 = NULL;
nomentreprise = fopen("nom.txt" , "r");
if (nomentreprise != NULL)

{

fscanf(nomentreprise, "%s" , nomdeentreprise); // lecture du fichier puis le nom = la valeur nomdeentreprise
fclose(nomentreprise);
chiffre1=fopen("chiffre.txt" , "r");
fscanf(chiffre1 , "%f" , &chiffre);
fclose(chiffre1);

printf("\n\n\n\n\n\n Bienvenue dans Looser gestion\n\n\n\n\n\n\n\n\n\n");
printf("Nom de votre entreprise %s \n " , nomdeentreprise);


printf(" Votre chiffre est %f" , chiffre);

printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t Menu pricipal\n");
printf("\t\t\t\t [1] Nouveau client\n");
printf("\t\t\t\t [2] Parametre\n");
printf("\t\t\t\t [3] Quitter\n");
printf("\n\n\n\n\n\n\n Nom de l'entreprise : %s Chiffre : %f Nombre de client : %d", nomdeentreprise , chiffre , client);
printf("\t \tVotre choix :\t" );
scanf("%d", menu );
switch (menu)
{


case 1:
printf(" Rentrer la somme de l'article : \t");
scanf("%lf", &chiffre2);
chiffre3 = chiffre+chiffre2;
ajchiffre=fopen("chiffre.txt" , "w+");
fprintf(ajchiffre, "%f" , chiffre3);
break;
case 2:
printf("Veuillez attendre la mise a jour pour pouvoir configuere le programme");
break;
case 3:
printf("Tchao !");
EXIT_SUCCESS;
break;
default:
printf("Erreur de chiffre ");
break;
}

}
else //fichier nom existe pas
{
printf("Creation des fichier necessaire\n\n\n\n");
printf("Veuillez indiquez le nom de votre entreprise : ");
scanf("%s", &nomdeentreprise);
printf("\n Veuillez indiquez votre chifre \n\n ");
printf("pour rentrer votre chiffre \n (exemple: 20 euros il faut taper 20.00, si c'est 0 euro 00.00 \n\n");
scanf("%lf" , &chiffre);
printf("\n\n Nom de votre entreprise : %s Votre chiffre : %f" , nomdeentreprise , chiffre);

FILE* creation = NULL;
creation = fopen("nom.txt" , "w");
fprintf(creation, "%s" , nomdeentreprise);
fclose(creation);
FILE* creation2 = NULL;
creation2 = fopen("chiffre.txt" , "w");
fprintf(creation2 ,"%f", chiffre);
fclose(creation2);
printf("\n\n succes lors de l'ecriture");
printf("\n\n Vous devez redemarrer looser Gestion \n Touche 1 puis entrer \t ");
scanf("%d", menu);
if (menu < 3)
{
return 0;
}

}


return 0;
}

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 août 2009 à 01:32
Pour la couleur en console, regarde ici (en particulier les réponses de fiddy)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
15 août 2009 à 02:07
Salut,

Pas mal d'imperfection dans ton code.
Déjà, je te conseille d'abandonner les float sauf cas particulier comme système embarqué. Mais sinon, les doubles sont recommandés.

Ensuite, dans les fscanf, ça sera de la forme : (f)scanf(chiffre1 , "%lf" , &chiffre);
Et dans les fprintf, ça sera de la forme : (f)printf(chiffre1 , "%f" , chiffre);

scanf("%s", &nomdeentreprise);
Pas besoin de l'esperluette (&) étant donné que c'est déjà l'adresse de la première case du tableau qui sera envoyé en paramètre de scanf. Attention au scanf("%s",...) c'est très dangereux, il vaut mieux utiliser du fgets.

EXIT_SUCCESS;
Il manque un return devant.

scanf("%d", menu);
T'as oublié cette fois l'esperluette devant menu. Fais bien attention avec les adresses mémoires, c'est source d'erreur.

Sinon, je ne comprends pas ce que tu veux dire par : "il ne veut pas affiche après un scanf".

Corrige toutes les erreurs que je t'ai citées (il doit en rester, j'y suis passé vite). Reposte la nouvelle version, et s'il te plaît, utilise les balises d'indentation de codes prévues à cet effet. Elles se situent à droite du bouton souligné.

Cdlt
0
Looser38230 Messages postés 1 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 15 août 2009
15 août 2009 à 11:02
nan c'set que j'avais bien oublier le & ,(f)print moi on ma pas appris comme sa ! =) mais le calcul du chiffre3 y veut pas sa faire
#include <stdio.h>
#include <stdlib.h>

int main()
{

float chiffre2 = 0.0;
int client = 0;
int menu = 0;
char nomdeentreprise [50] ;
float chiffre = 0.0;
FILE* nomentreprise = NULL;
FILE* ajchiffre=NULL;
FILE*chiffre1 = NULL;
nomentreprise = fopen("nom.txt" , "r");
if (nomentreprise != NULL)

{

fscanf(nomentreprise, "%s" , nomdeentreprise); // lecture du fichier puis le nom = la valeur nomdeentreprise
fclose(nomentreprise);
chiffre1=fopen("chiffre.txt" , "r");
fscanf(chiffre1 , "%f" , &chiffre);
fclose(chiffre1);

printf("\n\n\n\n\n\n Bienvenue dans Looser gestion\n\n\n\n\n\n\n\n\n\n");
printf("Nom de votre entreprise %s \n " , nomdeentreprise);


printf(" Votre chiffre est %f" , chiffre);
do
{
double chiffre3 = 00.00;
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t Menu pricipal\n");
printf("\t\t\t\t [1] Nouveau client\n");
printf("\t\t\t\t [2] Parametre\n");
printf("\t\t\t\t [3] Quitter\n");
printf("\n\n\n\n\n\n\n Nom de l'entreprise : %s Chiffre : %f Nombre de client : %d", nomdeentreprise , chiffre , client);
printf("\t \tVotre choix :\t" );
scanf("%d", &menu );
switch (menu)
{


case 1:
printf(" Rentrer la somme de l'article : \t");
scanf("%lf", &chiffre2);
chiffre3 = chiffre+chiffre2 ;
ajchiffre=fopen("chiffre.txt" , "w+");
fprintf(ajchiffre, "%f" , chiffre3);
client++;
break;
case 2:
printf("Veuillez attendre la mise a jour pour pouvoir configuere le programme");
break;
case 3:
printf("Tchao !");
EXIT_SUCCESS;
break;
default:
printf("Erreur dans la saisie du chiffre chiffre ");
break;
}
} while (menu<3);
}
else //fichier nom existe pas
{
printf("Creation des fichier necessaire\n\n\n\n");
printf("Veuillez indiquez le nom de votre entreprise : ");
scanf("%s", nomdeentreprise);
printf("\n Veuillez indiquez votre chifre \n\n ");
printf("pour rentrer votre chiffre \n (exemple: 20 euros il faut taper 20.00, si c'est 0 euro 00.00 \n\n");
scanf("%lf" , &chiffre);
printf("\n\n Nom de votre entreprise : %s Votre chiffre : %f" , nomdeentreprise , chiffre);

FILE* creation = NULL;
creation = fopen("nom.txt" , "w");
fprintf(creation, "%s" , nomdeentreprise);
fclose(creation);
FILE* creation2 = NULL;
creation2 = fopen("chiffre.txt" , "w");
fprintf(creation2 ,"%f", chiffre);
fclose(creation2);
printf("\n\n succes lors de l'ecriture");
printf("\n\n Vous devez redemarrer looser Gestion \n Touche 1 puis entrer \t ");
scanf("%d", menu);
if (menu < 3)
{
return 0;
}

}


return 0;
}
0
L'art de la programmation ne consiste pas à réaliser des 'copier-coller' mais à imaginer et à écrire une solution; alors parfois on met une '&' et parfois on en met pas, ce n'est pas du hasard et c'est pleinement justifié.
Quant à la présentation de ton programme, fiddy, t'avait demandé d'indenter avec les balises adéquates situées après les balises 'souligné'. Pour moi, présenté ainsi c'est beaucoup trop difficile à lire... je laisse donc à fiddy le soin (ou plutôt la charge) de le faire.
Bonne continuation.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
15 août 2009 à 11:38
Oui, bon, je ne vois pas l'intérêt de m'embêter à faire un long post si t'en tiens pas compte.
0