Mon programme C a cessé de fonctionner
Dalfab Messages postés 720 Statut Membre -
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
- Programme word gratuit - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - 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!