Programme en c fonctionne sous linux mais pas sous mac

Résolu/Fermé
owen16 - 22 févr. 2013 à 14:52
 owen16 - 22 févr. 2013 à 17:13
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 :
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:

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
22 févr. 2013 à 16:32
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.
0
Merci Char Snipeur je vais essayer. Il est vrai que je n'avais pas pensé au transformation implicite contenu dans mon programme.
Merci beaucoup pour ton aide
0
Effectivement tu avais raison c'est une erreur que je n'aurai pas pu corrigée seul
Encore merci
0