Mon programme C a cessé de fonctionner

Fermé
LucasLucatony - Modifié le 6 janv. 2023 à 15:22
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 26 déc. 2022 à 13:45

Bonjour,

J'ai écrit une fonction en C pour conjuguer un verbe, mais il plante apres la lecture du verbe saisis. S'il vous plaît, j'ai besoin d'une solution

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

int test(const char* mot1, const char* mot2){

    int count = 0;

    for(int i = 0; i < strlen(mot1); i++){
        for(int j = 0; j < strlen(mot2); i++){
            if(mot1[i] == mot2[j])
                count++;
        }
    }
    if(count == strlen(mot2)){
        return 1;
    }else{
        return 0;
    }
}

void conjuguer(char* verbe){

    char* pronoms[6] = {"Je", "Tu", "Il", "Nous", "vous", "Ils"};
    char* termi2[6] = {"is", "is", "it", "issons", "issez", "issent"};
    char* termi1[6] = {"e", "es", "e", "ons", "ez", "ent"};
    char* conj[6];
    char nouveau[strlen(verbe)];

    printf("conjugaison du verbe %s au present de l'indicatif : \n\n", verbe);
    
    if(strstr(verbe, "er") != NULL){

        for(int i = 0; i < strlen(verbe) - 2; i++){
            nouveau[i] = verbe[i];
        }

        for(int i = 0; i < 6; i++){

                if(nouveau[strlen(nouveau) - 1] == 'g' && termi1[i] == "ons"){

                    char new[strlen(verbe)];
                    strcpy(new, nouveau);
                    new[strlen(new)] = 'e';
                    strcpy(conj[i], strcat(new, termi1[i]));
                }else{
                    strcpy(conj[i], strcat(nouveau, termi1[i]));
                }
            
        }
    }else if(strstr(verbe, "ir") != NULL){

        for(int i = 0; i < strlen(verbe) - 2; i++){
            nouveau[i] = verbe[i];
        }

        for(int i = 0; i < 6; i++){
            strcpy(conj[i], strcat(nouveau, termi2[i]));
        }
        
    }else{
        printf("Le programme ne prends en charge que les verbes du 1er et 2eme groupe ");
    }

    for(int luc = 0; luc < 6; luc++){

        printf("%s %s\n", pronoms[luc], conj[luc]);
    }
}

int main(void){

    char verbe[15];
    printf("Entrer le verbe a conjuguer NB: il doit etre soit du 1er soit du 2eme groupe ");
    scanf("%s",  verbe);
    //conjuguer(verbe);
    printf("%d", test(verbe, "arl"));

    return 0;
}

Windows / Firefox 107.0

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié le 26 déc. 2022 à 13:46

Bonjour,

Il y a en effet quelques erreurs dans ton code.

Je saute la fonction test() qui a un problème ligne 10 (ce n'est pas i qu'i faut incrémenter mais j).

Ligne 28, tu réserves pour nouveau la taille de verbe (par exemple pour aimer, tu réserves 5 char), plus loin tu y mettras le conjugué (par exemple aimerons qui nécessite 8+1 char)!

Ligne 40, tu cherches la longueur de nouveau, mais tu n'a pas mis de terminateur à nouveau! La fonction strlen() ne peut pas faire son job.

Lignes 42 à 44, mêmes commentaire pour new bien trop petit et sans terminateur!

Lignes 45,47,58: Tu copies des chaines dans les conj[i], mais conj[] est un tableau de 6 pointeurs qui n'ont pas été initialisés, donc tu copies les chaines dans des endroits non définis! Vois-tu pourquoi remplacer la ligne 27 par cela, le résous:

    char conj[6][32];  // chaque conjugaison devrait faire moins de 31 caractères

A chaque itération tu vas concaténer à nouveau la conjugaison au lieu de réinitialiser nouveau à juste le radical. Par exemple tu obtiendras Ils aimeeseonsezent.

Ligne 32 et 51: Tu testes si le verbe contient "er" ou "ir", Par exemple perdre est vu comme tu premier groupe, et essaie de conjuguer verdir!

0