Fichier résultat inexistant

Pierre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai installé XcodeVersion 13.2.1 sour mon Mac et j'ai lancé un programme pour écrire des résultats dans un fichier :

/* fprintf example */
#include <stdio.h>

int main()
{
   FILE * pFile;
   int n;
   char name[100];

   pFile = fopen("myfile.txt", "w");
   for (n = 0; n < 3 ; n++)
   {
     puts("please, enter a name: ");
     gets(name);
     fprintf(pFile, "Name %d [%-10.10s]\n", n + 1, name);
   }
   fclose(pFile);

   return 0;
}


la compilation est OK, l'éditeur me permet de saisir les données que je rentre au clavier. Le problème, c'est que je ne trouve pas le fichier de résultats (
myfile.txt
) sur mon ordinateur.

Est-ce qu'il y a que chose à configurer avec XTools ?

Merci pour votre aide

P.

Configuration: Macintosh / Safari 15.2

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Merci d'utiliser les balises de code (4e bouton au dessus de la boîte dans laquelle tu tapes tes messages) et de ne pas utiliser d'abréviations.

    Ton code fonctionne chez moi, mais il y a plusieurs choses qui ne vont pas :
    • tu ne contrôle pas si ton
      fopen
      a marché (en particulier, si ton exécutable est lancé depuis un répertoire dans lequel tu n'as pas les droits en écriture, ça ne peut pas marcher) ;
    • tu ne dois jamais utiliser
      gets
      , comme stipulé dans la documentation. Utiliser par exemple
      scanf
      à la place, ou mieux, ce qui est suggéré dans cette discussion.


    Voici à quoi ça devrait plutôt ressembler en C :

    #include <stdio.h>
    
    int main(){
       unsigned int n;
       char name[100];
       const char * filename = "myfile.txt";
       FILE * fp = fopen(filename, "w");
    
       if (fp) {
           for (n = 0; n < 3 ; n++) {
             printf("please, enter a name: ");
             scanf("%s", name);
             fprintf(fp, "Name %d [%-10.10s]\n", n + 1, name);
           }
           fclose(fp);
       } else {
            fprintf(stderr, "Can't open %s", filename);
            return 1;
       }
    
       return 0;
    }


    Ensuite tu as posté dans le forum C++, mais le programme que tu proposes est plutôt du C. Si tu t'autorises le C++, tu peux utiliser
    std::ofstream
    ,
    std::cin
    ,
    std::cerr
    et
    std::string
    ce qui simplifiera le code. Si j'omets le formatage, voici à quoi ça ressemble :

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main(){
        using namespace std;
        const char * filename = "myfile.txt";
        ofstream ofs(filename);
        string name;
    
        if (ofs) {
            for (unsigned n = 0; n < 3; n++) {
                cout << "please, enter a name: ";
                cin >> name;
                ofs << "Name " << n + 1 << " [" << name << "]" << endl;
            }   
        } else {
            cerr << "Can't open " << filename << endl;
            return 1;
        }   
        return 0;
    }


    Bonne chance
    0