Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'arguments

Sujet résolu
    4 mars 2023 à 12:38:26

    Bonjour,

    J'ai un petit programme qui censé :

    - ouvrir 2 fichiers (entrée et sortie)

    - chercher, dans le fichier entrée, un mot donné et le remplacer par un autre mot donné

    - imprimer le résultat dans le fichier de sortie

    Lorsque je compile, tout se passe bien sauf que le fichier sortie reste vide.

    Qui peut voir mon code et me dire ce qui ne va pas? (Le code est en C)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_LENGTH 1000
    
    int main(int argc, char *argv[]) {
    
        // Vérifier les arguments de la ligne de commande
    if (argc != 4) {
        printf("Usage: remplace motA par motB du fichier_entree vers fichier_sortie\n");
        return 1;
    }
    
    // Ouvrir le fichier d'entrée en mode lecture
    FILE *fichier_entree = fopen(argv[1], "r");
    if (fichier_entree == NULL) {
        printf("Erreur: Impossible d'ouvrir le fichier %s\n", argv[1]);
        return 1;
    }
    
    // Ouvrir le fichier de sortie en mode écriture
    FILE *fichier_sortie = fopen(argv[2], "w");
    if (fichier_sortie == NULL) {
        printf("Erreur: Impossible de créer le fichier %s\n", argv[2]);
        fclose(fichier_entree);
        return 1;
    }
    
    // Lire chaque mot du fichier d'entrée et remplacer les occurrences de motA par motB
    char ligne[MAX_LENGTH];
    while (fgets(ligne, MAX_LENGTH, fichier_entree)) {
        char *mot = strtok(ligne, " \t\n");  // découper la ligne en mots
        while (mot != NULL) {
            if (strcmp(mot, argv[1]) == 0) {
                fputs(argv[2], fichier_sortie);  // écrire le mot de remplacement dans le fichier de sortie
            } else {
                fputs(mot, fichier_sortie);  // écrire le mot original dans le fichier de sortie
            }
            fputc(' ', fichier_sortie);  // écrire un espace après chaque mot
            mot = strtok(NULL, " \t\n");  // passer au mot suivant
        }
        fputc('\n', fichier_sortie);  // écrire un retour à la ligne à la fin de chaque ligne
    }
    
    // Fermer les fichiers
    fclose(fichier_entree);
    fclose(fichier_sortie);
    
    printf("Le fichier a été traité avec succès.\n");
    
    return 0;
    }
    

    Merci d'avance

    EDIT : J'ai viré le bout de code qui vérifie les arguments de la ligne de commande et ça marche.

    Problème résolu.

    -
    Edité par Daniel Harter 4 mars 2023 à 13:13:31

    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2023 à 2:12:33

      Il faut faire le test sur 5 arguments:

      argv[0] : nom du programme

      argv[1] : mot à rechercher

      argv[2] : mot de remplacement

      argv[3] : nom du fichier d'entrée

      argv[4] : nom du ficher de sortie

      soit 5 arguments, pas 4.

      -
      Edité par edgarjacobs 5 mars 2023 à 2:45:15

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        5 mars 2023 à 8:36:27

        Il faut garder la vérification, mais mettre 5 ligne 10, au lieu de 4 (message ci-dessus)

        Aussi : quand le programme s'exécute, lire les messages qu'il produit...

        -
        Edité par michelbillaud 5 mars 2023 à 8:38:14

        • Partager sur Facebook
        • Partager sur Twitter

        Problème d'arguments

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown