Mon programme C a cessé de fonctionner
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
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
- Mon programme C a cessé de fonctionner
- Programme demarrage windows - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Comment faire fonctionner le chromecast - Guide
1 réponse
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!