Programme en c fonctionne sous linux mais pas sous mac
Résolu
owen16
-
owen16 -
owen16 -
Bonjour,
Je suis débutant en programmation en c et je sollicite votre aide car je ne possède pas de mac. J'ai écrit un programme en C pour générer un script pour gnuplot et il fonctionne très bien sous linux.Pourtant il ne fonctionne pas sous mac.
Mon code ne fonctionne pas lorsque j'utilise dans mes printf et scanf "%s". Le message d'erreur m'indique, si je comprends bien que ce symbole n'est pas adapté au type de mes variables qui sont des chaines de caractères. Je vous remercie d'avoir lu ma question et je vous serai reconnaissant si quelqu'un savait comment modifier mon code pour les mac merci.
Je vous montre un bout de mon programme :
Je suis débutant en programmation en c et je sollicite votre aide car je ne possède pas de mac. J'ai écrit un programme en C pour générer un script pour gnuplot et il fonctionne très bien sous linux.Pourtant il ne fonctionne pas sous mac.
Mon code ne fonctionne pas lorsque j'utilise dans mes printf et scanf "%s". Le message d'erreur m'indique, si je comprends bien que ce symbole n'est pas adapté au type de mes variables qui sont des chaines de caractères. Je vous remercie d'avoir lu ma question et je vous serai reconnaissant si quelqu'un savait comment modifier mon code pour les mac merci.
Je vous montre un bout de mon programme :
int rep3; // Initialisation variable reponse choix enregistrement du fichier
char nomfichierimage[200]; //Initialisation variable contenant le nom du fichier graphique
char Nomfichiersortie[200]; // Initialisation variable contenant nom et adresse fichier donnees
const char* graph;
graph="scriptgnuplot.gnu"; // Nom du script pour gnuplot. Pour changer le nom, ecrire le nouveau nom entre les parentheses
sprintf(Nomfichiersortie,"W_upto_%lg_%lg_%lg_%lg_%lg_%lg_%i.dat",kmax,A,T,D,omega,k0,NHARM); //Saisie du nom de l'adresse du fichier de donnees utilisees pour le graphique
// Creation fichier intermediaire
FILE* pgraph;
pgraph= fopen(graph,"wt");
int choixMenu;
// Menu
printf("=== Menu ===\n\n");
printf("1.Graphique 3d\n");
printf("2.Graphique t en fonction de w\n");
printf("3. Graphique 3d et Graphique t en fonction de w\n");
printf("\nVotre choix ? ");
scanf("%d", &choixMenu);
printf("\n");
switch (choixMenu)
{
case 1:
// Parametre graphique
fprintf (pgraph, "set term x11\n"); // ouverture fenetre graphique
fprintf (pgraph, "set hidden3d\n"); //Cache les ligne de niveau
fprintf (pgraph , "set pm3d\n"); // Demande graphique 3d
fprintf (pgraph,"unset surface\n"); // Cache les contour de la figure
fprintf (pgraph,"unset key\n"); // Empeche l'affichage du titre du fichier de donnees sur le graphique. Pour mettre le titre, remplacer "unset" par " set"
fprintf (pgraph,"set xrange [-%f:%f]\n",kmax,kmax); // Gestion echelle axe des x graphique. Echelle prend pour valeur frequence max kmax
fprintf (pgraph,"set yrange [-%f:%f]\n",tmax,tmax); // Gestion echelle axe des y graphique. Echelle prend pour valeur temps max tmax
fprintf (pgraph , "set xlabel \"frequency\"\n"); // Legende axe des x
fprintf (pgraph , "set ylabel \"time\"\n"); // Legende axe des y
fprintf (pgraph , "set title \"Fonction de Wigner\"\n"); // Titre graphique
//Palette graphique
fprintf (pgraph,"set colorbox\n");
fprintf (pgraph,"set cbrange [-1:1.5]\n");
fprintf (pgraph,"set palette define (-1 \"#00008b\",0 \"#000000\",1 \"#ffffff\",1.5 \"#8b0000\",\n");
//Tracer le graphique
fprintf (pgraph,"splot \"%s\" using 1:2:3 with lines \n", Nomfichiersortie); // Le graphique prend le fichier de donnees dont l'adresse est Nomfichiersortie
fprintf (pgraph , "pause -1 \"Maintenant appuyez sur entree pour terminer la visualisation\"\n");
//Demande de sauvegarde
printf("Si vous voulez enregistrer le graphique, tapez 1 \n");
scanf("%d",&rep3 );
// Sauvegarde
if (rep3==1)
{
printf("Donnez un nom au fichier image en 3d\n");
scanf("%s", &nomfichierimage );
fprintf (pgraph,"set terminal jpeg\n");
fprintf (pgraph,"set out\"%s.jpeg\"\n",nomfichierimage);
fprintf (pgraph,"replot\n");
}
A voir également:
- Programme en c fonctionne sous linux mais pas sous mac
- Adresse mac - Guide
- Comment mettre en veille un programme sous windows 10 - Guide
- @ Sur mac - Guide
- Nettoyer son mac - Guide
- Temperature mac - Guide
3 réponses
dans scanf("%s", &nomfichierimage ); nomfichierimage est de type char[] qui est implicitement transformé en type char* lors d'un passage en fonction. &nomfichierimage est donc en gros de type char**. Essai en supprimant le '&'. C'est étonnant que sous linux tu n'es pas de warning.