Files
DEV/DEV1.1/CM3/blague_resolu.c
Simoes Lukas 2217e7986c Java
2025-01-30 16:07:12 +01:00

77 lines
1.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}