Fichier résultat inexistant

Fermé
Pierre - Modifié le 17 janv. 2022 à 12:49
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 17 janv. 2022 à 13:05
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
A voir également:

1 réponse

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
17 janv. 2022 à 13:05
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