Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercices pour débutants en C

Au menu : zSommeChiffres (nombres, algo)

17 octobre 2008 à 0:06:40

Citation : noob4ever

Citation : Pas de titre

Mon second problème est que ça ne me plait pas de limiter la taille de l'adresse donnée et la taille du texte que l'on veut écrire dans le fichier choisit, y a-il un moyen pour éviter ça ? (j'ai penser a l'allocation dynamique mais je ne veut pas non plus demander a l'utilisateur de prévoir le nombre de caractères qu'il compte taper :euh: )


C'est les limites de la console, la solution est de passé en IHM avec une RichTextBox.


Quelles limites ? Il suffit d’allouer un bloc mémoire d’une taille donnée (arbitraire), et au cours de la saisie, de redimensionner le bloc si besoin (avec realloc), jusqu’à ce que la saisie soit terminée.

Nul besoin de sortir le mode graphique (a fortiori une RichTextBox) pour ça...
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 9:55:15

Re salut!
Merci noobforever pour l'info!
Mais même après lecture et relecture du tuto de matheo, moi pas comprendre XD

je comprend pourquoi il faut vider le buffer, mais je comprend pas la fonction clean :S


C'est ok merci ;)
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 13:09:49

Citation : gouttegd

Quelles limites ? Il suffit d’allouer un bloc mémoire d’une taille donnée (arbitraire), et au cours de la saisie, de redimensionner le bloc si besoin (avec realloc), jusqu’à ce que la saisie soit terminée.

Nul besoin de sortir le mode graphique (a fortiori une RichTextBox) pour ça...


+1

Mais je précise qu'en C standard, pas évident de suivre ce qui se passe au cours de la saisie (tant que l'utilisateur n'appuie pas sur entrée). Je crois qu'il faut donc faire appel a une lib tierce (ou l'API système) pour cela.
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 17:32:04

@ yoch : Ah bon ?

int
read_line(char **buffer, size_t *len, FILE *f)
{
    char c = 0;
    int n = 0;

    if ( buffer == NULL || len == NULL ) {
        return -1;
    }

    if ( *buffer == NULL ) {
        *len = 0;
    }

    while ( c != '\n' && (c = fgetc(f)) != EOF ) {
        if ( n >= *len ) {
            /* Le tampon est plein (ou il n'a encore jamais été
             * alloué), on le redimensionne (ou on l'alloue). */
            *len += 512;
            *buffer = realloc(*buffer, *len);
        }

        /* On stocke le caractère lu dans le tampon. */
        *(*buffer + n++) = c;
    }

    /* On retourne le nombre de caractères lus (-1 si on est à
     * la fin du flux). */
    return n > 0 ? n : -1;
}

Il n’y a là que du C standard, et sauf erreur bête de ma part (je n’ai pas le temps de tester), ça marche.

On peut ainsi lire une ligne entière (jusqu’au premier caractère '\n', c’est-à-dire jusqu’à un appui sur la touche <Entrée> si on lit depuis le terminal), quelque que soit sa longueur :
char *buffer = NULL;
size_t buffer_len;

read_line(&buffer, &buffer_len, stdin);

C’est plus ou moins le comportement de la fonction (non standard) getline de la bibliothèque C GNU.

Donc, nul besoin de changer le comportement du terminal pour lire les caractères un par un (ce qui, effectivement, serait impossible avec la seule bibliothèque C standard).
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 17:33:21

Citation : gouttegd

Citation : noob4ever

Citation : Pas de titre

Mon second problème est que ça ne me plait pas de limiter la taille de l'adresse donnée et la taille du texte que l'on veut écrire dans le fichier choisit, y a-il un moyen pour éviter ça ? (j'ai penser a l'allocation dynamique mais je ne veut pas non plus demander a l'utilisateur de prévoir le nombre de caractères qu'il compte taper :euh: )


C'est les limites de la console, la solution est de passé en IHM avec une RichTextBox.


Quelles limites ? Il suffit d’allouer un bloc mémoire d’une taille donnée (arbitraire), et au cours de la saisie, de redimensionner le bloc si besoin (avec realloc), jusqu’à ce que la saisie soit terminée.

Nul besoin de sortir le mode graphique (a fortiori une RichTextBox) pour ça...


On est d'accord, il y a une différence entre trouver un algorithme pour prévoir une marge de manoeuvre, faire des realloc et peut-être même se taper des memory leak et tout le blabla, et faire une petite richtextbox toute jolie.
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 17:37:34

@ noob4ever : Lis le code juste au-dessus, et dis-moi que l'API Win32 est plus simple.
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 17:51:40

Citation : gouttegd

@ noob4ever : Lis le code juste au-dessus, et dis-moi que l'API Win32 est plus simple.


Dit moi si ça est plus simple ?
GtkWidget* text_view=gtk_text_view_new();
gtk_box_pack_start(GTK_BOX(box),text_view,TRUE,TRUE,0);


  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 18:00:12

OK, GTK+, si tu préfères. Et maintenant que tu as créé ta jolie RichTextBox, tu t’en sers comment ? Comment tu réagis aux entrées de l’utilisateur, comment récupères-tu le texte saisi ?

De toute façon, peu importe. Tu affirmais qu’il fallait passer à une IHM en mode graphique pour saisir du texte, ce qui est absurde et je te l’ai montré. Après, si tu ne veux pas le reconnaître ou si tu préfères ajouter une dépendance à un toolkit graphique pour un truc aussi élémentaire, c’est ton problème.
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 18:08:12

Citation : Pas de titre

ajouter une dépendance à un toolkit graphique pour un truc aussi élémentaire, c’est ton problème.


élémentaire ? lol ?! et le problème de dépendre à GTK+ qui est portable ?
On est pas dans la même longueur d'onde, mais si tu préfères faire compliqué je respecte ton choix ;) .

EDIT: j'oubliais, j'ai effectivement dit

Citation : Pas de titre

C'est les limites de la console, la solution est de passé en IHM avec une RichTextBox.


Et je sais que tu es très rigoureux donc pour me corriger je remplace "limites" par inconvénient?
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 18:11:48

Si tu préfères faire des programmes en mode graphique, je respecte ton choix. :) Mais ne viens pas prétendre que la solution est de « passé (sic) en IHM » (sous-entendu, IHM graphique), parce que les autres solutions te semblent plus compliquées.

[edit]

Citation : noob4ever

EDIT: j'oubliais, j'ai effectivement dit

Citation

C'est les limites de la console, la solution est de passé en IHM avec une RichTextBox.


Et je sais que tu es très rigoureux donc pour me corriger je remplace "limites" par inconvénient?


Non, tu remplaces toute la phrase par « je ne saurais pas le faire en mode console, donc je te propose de le faire en mode graphique à la place. » Là, ce sera correct.
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 18:35:11

Salut à tous, je pense que je ais abandonner l'idée de taille non limitée, en effet je n'ai pas tout à fait comprit ton code gouttegd...

Pour le premier problème, voici le code de ma "fonction" lireFichier, j'utilise les fonctions de lecture de M@teo21 dans sa partie sur la saisie sécurisée :

void lireFichier(void)
{
    FILE *fichier = NULL;
    char adresse[100] = "";
    char contenu[TAILLE_MAX] = ""; // TAILLE MAX vaut 1000 (peut d'intérêt pour mon problème mais bon  )

    printf ("Veuillez entrer le chemin absolu du fichier que vous voulez lire.\n");
    printf ("Si vous etes sous windows, merci de taper les \\ en double.\n\n");
    lire (adresse, 100);
    printf ("\n");

    fichier = fopen (adresse, "r");

    if (fichier != NULL)
    {
        rewind (fichier);  // Avec ou sans j'ai le même problème

        while (fgets(contenu, TAILLE_MAX, fichier) != NULL)
        {
            printf ("%s", contenu);
        }

        fclose(fichier);
    }

    else
    {
        printf ("Impossible d'ouvrir le fichier, verifiez le chemin donne.\n");
    }

}

  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 18:49:10

Citation : DzEt4

Salut à tous, je pense que je ais abandonner l'idée de taille non limitée, en effet je n'ai pas tout à fait comprit ton code gouttegd...


C’est probablement un peu de ma faute, je l’ai écrit « à l’arrache » et je n’ai pas spécialement cherché à le rendre compréhensible du premier coup par un débutant. Le but était seulement de montrer que c’est parfaitement faisable entièrement en C standard.
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 19:24:48

Salut à tous!
Dite moi s'il vous plait pour quel débutant vous faites ces exercices?
Parce que là j'ai entamé des révisons et je pensé que je trouverai des exos sur les fonctions, des boucles etc... :lol: des trucks vraiment facile et là j'ai l'impression que vous faite des truck apprit après les pointeurs. o_O (d'après le tuto de M@teo21)

Or je fais des révisions pour être sûr de pas me prendre une raclée.
(au niveau des pointeurs) :-°

Donc si quelqu'un à une idée d'éxo (mise en vrac vite fait) pour les vrais zéros, les vrais nul quoi :p , qu'il ne se gène pas.

ps: (Au faite, j'ai un petit problème, je ne vois pas les message en entier! on dirait que mon écran est trop petit, je crois que c'est un problème de zoom, ou se trouve l'endroit pour le changer? vous savez il est écrit en %^^)

Merci!
  • Partager sur Facebook
  • Partager sur Twitter
17 octobre 2008 à 20:22:01

Salut,

Ces exercices sont pour ceux qui sont en train de lire les tutoriels de m@teo21. Si tu en as fini le chapitre sur la manipulation des fichiers, tu es en mesure de d'entraîner à l'exercice zReader. Sinon, tu attends le prochain, il viendra assez rapidement. Concernant le sujet, tu seras vite fixé mais si tu as lu la première partie du cours de m@teo21, tu dois pourvoir le faire et tu ne pourras que t'améliorer ! :)

Je conçois ces exercices pour qu'ils soient réalisables pour les débutants. Après il y a aussi plusieurs niveaux de débutants.
crys'
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 9:25:25

bonjour Chris,
j'ai commencé l'exo, merci de prendre du temps avec nous les Zéroszeros :)
Bon ca vaut que cela vaut je me suis pas trop preocupé du contenu du fichier a creer !
je t'envoie mon code.
#include <stdio.h>
#include <stdlib.h>

#define nomFichier "fic.000"
#define tailleLecture 80


FILE *fichier = NULL;

void creerFichier();
void lireFichier();
void ecrireFichier();
void Pause(int finPause);
void Presentation();
void AffichageMenu();


int main()
{
    int continuer=1;
    while (continuer != 0)
    {
        system("cls");
        Presentation();
        AffichageMenu();
        printf("\n .......................................................................... \n");
        printf("voulez vous continuer 0= non / 1=oui ? :");
        scanf("%d",&continuer);
    }
    return 0;
}

void creerFichier()
{
    //system ("edit  fic.000");
    printf(" taper control Z et entrer merci");
    system ("copy con: fic.000");

}


void lireFichier()
{
    char chaine[tailleLecture];
    fichier = fopen( nomFichier , "r");// je peux lire uniquement
    if (fichier != NULL)
    {
         // lecture possible
        while (fgets(chaine,tailleLecture,fichier) != NULL)
        {
            printf("%s",chaine);
        }

        // fermeture fichier
        fclose(fichier);
    }
    else
    {
        //lecture impossible
    }

}


void ecrireFichier()
{
    char chaine[80];
    fichier = fopen( nomFichier , "r+");// je peux lire et ecrire
    if (fichier != NULL)
    {
        // ecriture possible
        fseek(fichier,0,SEEK_END);
        printf("quel mot voulez vous rajouter au fichier ?\n");
        scanf("%s",chaine);
        fprintf(fichier,chaine);
        fprintf(fichier,"\n");
        fclose(fichier);
    }
    else
    {
        //lecture impossible
    }
}



void Pause(int finPause)
{
    long i;
    finPause=2000000*finPause;//environ 1 seconde de repis
    for (i=0;i<finPause;i++)
    {
    }
}


void Presentation()
{
    printf("Mon premier projet en C, mon premier challenge. \n");
    printf("_______________________________________________ \n");
    printf("voici l'enonce du probleme \n \n");
    printf(" creer un fichier, pouvoir y ecrire, le lire \n");
    printf("________________________________________________\n\n");

}

void AffichageMenu()
{
    long choix=0;
    while (choix==0)
    {
       //system("cls"); // efface la console sous windows !
       printf("1 : creer un fichier\n");
       printf("2 : lire le fichier \n");
       printf("3 : ecrire dans le fichier \n");
       scanf("%ld",&choix);
       switch (choix)
       {
           case 1 :
           printf("choix 1 : creer un fichier\n");
           creerFichier();
           break;

           case 2 :
           printf("choix 2 : lire dans le fichier \n");
           lireFichier();
           break;

           case 3 :
           printf("choix 3 : ecrire dans le fichier \n");
           ecrireFichier();
           break;

           default :
           printf("Erreur recommencer votre choix\n");
           break;
       }
    }
}






Finalement j'ai le problème suivant lors de la creation de mon fichier ! la seule solution que j'ai trouvé c'est de passer par une fonction de system

Comment fait on en C, dans l'excellent cours de mateo j'ai pas vu ?

Merci, le 000 que je suis ! :p
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 9:39:48

Citation : zx-spectrum

Finalement j'ai le problème suivant lors de la creation de mon fichier ! la seule solution que j'ai trouvé c'est de passer par une fonction de system

Comment fait on en C, dans l'excellent cours de mateo j'ai pas vu ?


Va relire le tuto de M@téo sur les fichiers, notamment les différent mode d'ouverture de fichiers, les parties en italique.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 octobre 2008 à 9:52:53

Au fait crys' quand on t'envoie un code est-ce que tu réponds en disant genre "tu pourrais améliorer ici, ou là" ou "non ton truc bugue ici", etc. ?
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 9:54:02

Merci, Va falloir que je m'achète des binocles ! :)
reponse : mode d'ouverture "a+"
merci. :-°
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 9:56:22

Citation : zx-spectrum

Merci, Va falloir que je m'achète des binocles ! :)
reponse : mode d'ouverture "a+"
merci. :-°


Il n'y a pas que a+.

w, a, w+, a+.
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 10:02:28

Je suis aussi un gros triple zéro, je fait l'exercice aussi et voila ce que je fait pour créer mon fichier si sa peut t'aider.

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

int main(int argc, char *argv[])
{
    char creer[100] = {0}, enter[100] = {0};
                      
    printf("Quel est le nom et son extention, du fichier a creer ? \n");
    scanf("%s", creer);
    fichier = fopen(creer, "w");
    if (fichier != NULL)
    {
        // On crée le fichier et ont le ferme.
        fclose (fichier);        
    }
    else
    {
         printf("Impossible de creer le fichier %s", creer);
    }
}


édité : correction de mon ereure faut toujours ce relire.
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 10:05:03

printf("Impossible de creer le fichier %c", creer);

Erreur dans le format, pour une chaine de caractère, c'est %s
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 13:08:13

Citation : ttthebest

Au fait crys' quand on t'envoie un code est-ce que tu réponds en disant genre "tu pourrais améliorer ici, ou là" ou "non ton truc bugue ici", etc. ?


Quand c'est nécessaire, sinon, je ne fais que regarder vos codes et tester s'ils fonctionnent. Lors de la correction de l'exercice, je pourrais par exemple retenir tel ou tel code et le présenter à tous. ;)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 octobre 2008 à 20:14:52

Citation : gouttegd

@ yoch : Ah bon ?

int
read_line(char **buffer, size_t *len, FILE *f)
{
    char c = 0;
    int n = 0;

    if ( buffer == NULL || len == NULL ) {
        return -1;
    }

    if ( *buffer == NULL ) {
        *len = 0;
    }

    while ( c != '\n' && (c = fgetc(f)) != EOF ) {
        if ( n >= *len ) {
            /* Le tampon est plein (ou il n'a encore jamais été
             * alloué), on le redimensionne (ou on l'alloue). */
            *len += 512;
            *buffer = realloc(*buffer, *len);
        }

        /* On stocke le caractère lu dans le tampon. */
        *(*buffer + n++) = c;
    }

    /* On retourne le nombre de caractères lus (-1 si on est à
     * la fin du flux). */
    return n > 0 ? n : -1;
}


Il n’y a là que du C standard, et sauf erreur bête de ma part (je n’ai pas le temps de tester), ça marche.

On peut ainsi lire une ligne entière (jusqu’au premier caractère '\n', c’est-à-dire jusqu’à un appui sur la touche <Entrée> si on lit depuis le terminal), quelque que soit sa longueur :

char *buffer = NULL;
size_t buffer_len;

read_line(&buffer, &buffer_len, stdin);


C’est plus ou moins le comportement de la fonction (non standard) getline de la bibliothèque C GNU.

Donc, nul besoin de changer le comportement du terminal pour lire les caractères un par un (ce qui, effectivement, serait impossible avec la seule bibliothèque C standard).


Mea culpa, je suis stupide de ne pas avoir pensé a fgetc... Merci de m'avoir corrigé ! :)

Je me permet de corriger un petit oubli dans ta fonction :
int read_line(char **buffer, size_t *len, FILE *f)
{
    char c = 0;
    size_t n = 0;

    if ( buffer == NULL || len == NULL )
    {
        return -1;
    }

    if ( *buffer == NULL )
    {
        *len = 0;
    }

    while ( c != '\n' && (c = fgetc(f)) != EOF )
    {
        if ( n >= *len )
        {
            /* Le tampon est plein (ou il n'a encore jamais été
             * alloué), on le redimensionne (ou on l'alloue). */
            *len += 512;
            *buffer = realloc(*buffer, *len + 1);
        }

        /* On stocke le caractère lu dans le tampon. */
        *(*buffer + n++) = c;
    }
    /* On termine la chaine par un caractere nul */
    *(*buffer + n) = '\0';
    /* On retourne le nombre de caractères lus (-1 si on est à
     * la fin du flux). */
    return (n > 0) ? (int) n : -1;
}

J'aurais pensé que l'on ne peut pas corriger la saisie, mais j'ai testé et on peut...
Des explications ?
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 20:43:22

Citation : yoch

Je me permet de corriger un petit oubli dans ta fonction :

/* On termine la chaine par un caractere nul */
*(*buffer + n) = '\0';

Naturellement, c’était un oubli volontaire, pour voir si tout le monde suivait. :-°

Citation : yoch

J'aurais pensé que l'on ne peut pas corriger la saisie, mais j'ai testé et on peut...


On n’a pas changé le comportement du terminal, donc celui-ci continue à n’envoyer la saisie à l’application qu’après un appui sur <Entrée>. Tant qu’on a pas appuyé sur <Entrée>, la chaîne saisie est encore au niveau du terminal, et il donc encore possible de l’éditer.

À l’appui de <Entrée>, le terminal envoie toute la chaîne à l’application, où elle est stockée dans le tampon de la bibliothèque C associé à stdin. C’est dans ce tampon que fgetc va chercher les caractères un par un.

Si tu voulais vraiment recevoir les caractères sitôt après la frappe de la touche correspondante (et non après <Entrée>), il est indispensable de changer le comportement du terminal, ce qui, pour le coup, n’est effectivement pas possible en C standard.
  • Partager sur Facebook
  • Partager sur Twitter
18 octobre 2008 à 21:38:55

Merci pour ces precisions ! :)
  • Partager sur Facebook
  • Partager sur Twitter
19 octobre 2008 à 16:05:44

Salut à tous,

Je ne serais pas là du dimanche 26 au jeudi 30, je posterais donc le prochain exercice (et la correction du premier si j'ai le temps) un peu plus tôt que prévu (mercredi ou samedi). ;)
Merci pour votre compréhension.
  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2008 à 18:46:46

On te souhaites de bonne vacances.
merci pour ton initiative du 000 que je suis !
@+
  • Partager sur Facebook
  • Partager sur Twitter
21 octobre 2008 à 23:32:21

Conseil très très utile a mon avis, faire beaucoup plus d'exercice. Et aussi des exercices "amusants", par exemple des jeux comme Plus ou moins, ou encore le pendu. Les gens adorent programmer des jeux

a++!
  • Partager sur Facebook
  • Partager sur Twitter
22 octobre 2008 à 17:34:41

Correction pour zReader



Envois des résultats à réponse : 10

J'ai donc décidé d'apporter la correction du premier exercice de ce topic aujourd'hui. Un codage "simple" pour atteindre le but de l'exercice n'aurait pas dû poser de gros problèmes. Tout ce qu'il fallait savoir se trouvait dans le tutoriel de m@teo21. ;)
Dans les codes que j'ai reçu, c'était quasiment toujours de la qualité et tous les codes fonctionnaient correctement. Je reprocherais donc juste à certains de ne pas permettre à l'utilisateur de zReader de retourner au menu.

Voici donc mon code, il n'est pas parfait mais exploite déjà pas mal de notions du tuto de m@teo21 :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define TAILLE 5000

typedef struct fichier
{
    FILE* doc;
    char* chemin;
} fichier;

void read(fichier*);
void write(fichier*);
void creat(fichier*);

void buf(){
    int c = 0;
    while ((c = getchar()) != '\n');
}
void wait(){
    printf("\n Appuyez sur entrer pour retourner au menu...");
    buf();
}
void strcle(char* str){
    char* d = strchr(str, '\n');
    if (d) *d = '\0';
    else buf();
}

int main()
{
    fichier monFichier;
    monFichier.doc = NULL;
    monFichier.chemin = NULL;
    char choixSec[2];
    int choix;

    printf("\n Bienvenue sur zReader - lisez, cr\x82""ez et \x82""crivez dans vos fichiers !\n");

    do{
        printf("\n 1. Lire"
               "\n 2. Ecrire"
               "\n 3. Cr\x82""er"
               "\n 4. Quitter \n"
               "\n Votre choix ? ");

        fgets(choixSec,2,stdin); buf();
        choix = atoi(choixSec);

        if(choix == 1) read(&monFichier);
        else if(choix == 2) write(&monFichier);
        else if(choix == 3) creat(&monFichier);
        else if(choix == 4) break;
        else printf("\n Mauvaise saisie !\n");

    }while(1);

    return EXIT_SUCCESS;
}

void read(fichier* monFichier)
{
    monFichier->chemin = malloc(TAILLE * sizeof(char));
    char c[TAILLE];

    printf("\n Entrez le chemin du fichier : ");
    fgets(monFichier->chemin, TAILLE, stdin);
    strcle(monFichier->chemin);
    printf("\n\n");

    if(monFichier->doc = fopen(monFichier->chemin,"r"))
    {
        printf(" Contenu du fichier : \n\n");
        while (fgets(c,TAILLE,monFichier->doc) != NULL)
        printf(c);
        fclose(monFichier->doc);
    }
    else
    {
        printf(" Le fichier n'existe pas ! \n");
    }
    free(monFichier->chemin);
    wait();
}

void write(fichier* monFichier)
{
    monFichier->chemin = malloc(TAILLE * sizeof(char));
    char inputInFile[TAILLE*3];

    printf("\n Entrez le chemin du fichier (si invalide, le fichier sera cr\x82""e) : ");
    fgets(monFichier->chemin, TAILLE, stdin);
    strcle(monFichier->chemin);
    printf("\n\n");

    monFichier->doc = fopen(monFichier->chemin,"w");
    printf(" Saisie dans le fichier (pour fermer, tapez \"f.close\") : \n\n");
    while(fgets(inputInFile,TAILLE*3,stdin))
    {
        if (strstr(inputInFile,"f.close"))
            break;
        fputs(inputInFile,monFichier->doc);
    }
    fclose(monFichier->doc);
    free(monFichier->chemin);
    printf("\n Contenu enregistr\x82"".");
    wait();
}

void creat(fichier* monFichier)
{
    char path[TAILLE];
    char ext[30];

    printf("\n\n Nom du fichier (extension non-incluse) : ");
    fgets(path,TAILLE,stdin);
    strcle(path);
    printf("\n Extension du fichier : ");
    fgets(ext,30,stdin);
    strcle(ext);

    strcat(path,".");
    strcat(path,ext);

    monFichier->doc = fopen(path,"w");
    fclose(monFichier->doc);
    printf("\n Fichier cr\x82""e avec succ\x8a""s \n\n");
}

Nous avons ici une utilisation des notions de structure, d'allocation dynamique, de define, de manipulation des fichiers, etc...

Ce soir encore j'espère : le prochain exercice. :)
  • Partager sur Facebook
  • Partager sur Twitter