Files
DEV/DEV1.1/CM3/blague_resolu.c

77 lines
1.4 KiB
C
Raw Normal View History

2025-01-30 16:07:12 +01:00
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char valeurs[1000];
int debut;
int fin;
size_t taille;
} file;
void initialise_file(file* f) {
f->debut = 0;
f->fin = 0;
f->taille = 0;
}
int empty(file* f) {
return (f->taille == 0);
}
void enqueue(file* f, char c) {
f->valeurs[f->fin] = c;
f->fin++;
f->taille++;
}
char dequeue(file* f) {
if (empty(f)) {
printf("Erreur : La file est vide.\n");
return;
}
f->debut++;
f->taille--;
return f->valeurs[f->debut-1];
}
int main(int argc, char** argv) {
FILE* fichier = NULL;
file f;
char resultat;
initialise_file(&f);
if (argc != 2) {
printf("Il faut entrer un (unique) chemin de fichier.\n");
return EXIT_FAILURE;
}
fichier = fopen(argv[1], "r");
if (fichier == NULL) {
printf("Erreur d'ouverture.\n");
return EXIT_FAILURE;
}
fread(&resultat, 1, 1, fichier);
if (resultat == ';') { /* Point d'interrogation grec */
enqueue(&f, ';'); /* Point virgule */
}
else {
enqueue(&f, resultat);
}
while (feof(fichier) != 0) {
fread(&resultat, 1, 1, fichier);
if (resultat == ';') { /* Point d'interrogation grec */
enqueue(&f, ';'); /* Point virgule */
}
else {
enqueue(&f, resultat);
}
fclose(fichier);
fichier = fopen(fichier, "w+");
while (feof(fichier) != 0) {
resultat = dequeue(&f);
fwrite(&resultat, 1, 1, fichier);
}
fclose(fichier);
return EXIT_SUCCESS;
}