Soucis d'un débutant en C
badeneve
-
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
mype Messages postés 2435 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je débute la programmation cette année et aujourd'hui, je tentais de construire un petit programme et de fil en aiguille je suis arrivé ici.
Explications:
Mon but est le suivant:
-Demander un mot à l'utilisateur
*calculer la longueur de ce mot
-Demander un texte à l'utilisateur
*calculer la longueur de ce texte
Je condidère que le texte sera plus long que le mot.
Ensuite, à partir des deux tableaux:
tableau du mot
tableau du texte
j'aimerais pouvoir obtenir le mot de départ dans un troisieme tableau
Je souhaiterais que dans ce tableau, tant que la longueur du texte préalablement saisi n'est pas été atteinte, que le mot
du premier tableau se répète dans le dernier tableau
Exemple (ça sera plus clair):
Le mot que l'utilisateur saisi: TOTOTATA
Le texte que l'utilisateur saisi: ILFAITFROIDDEMAIN (*il fait froid demain* je ne considère pas les espaces, je décide que l'utilisateur ne les entre pas.
T O T O T A T A
I L F A I T F R O I D D E M A I N
T O TO T A T A T O T O T A T A T mon 3em tableau
Voilà ce que je souhaiterais avoir.
Voici mon code:
________________________________________________________________
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char cle[36];
char cle1[36];
char texte[36];
int i, j, LongueurClef, LongueurTexte, LongueurClef1;
printf("Saisir la clef (36 caracteres au maximum):\n");
gets(cle);
LongueurClef=strlen(cle);
printf("Saisir le texte a crypter (36 caracteres au maximum):\n");
gets(texte);
LongueurTexte=strlen(texte);
LongueurClef1=LongueurTexte;
for(i=0;i<LongueurClef1;i++)
{
cle1[i]=cle[i];
if (i>LongueurClef)
cle1[i]=cle1[i-LongueurClef];
}
cle1[i]='\0';
printf("La clef %s\n:",cle1);
system("pause");
}
_________________________________________________________________
Je ne vois pas ce qui est faux dans mon code, mais je suis sûr d'une chose, ça ne fonctionne pas.
Avec un compilateur, mon troisième tableau me donne la nouvelle clef: TOTOTATA, soit le mot saisi au départ!
Je veux bien croire que mon erreur soit dans la boucle, mais je ne vois pas pourquoi ce que j'ai fait ci-dessus ne fonctionne pas.
Si l'un de vous pouvait m'aider, ou m'apporter une solution ça serait vraiment génial.
D'avance merci.
Hugo
Je débute la programmation cette année et aujourd'hui, je tentais de construire un petit programme et de fil en aiguille je suis arrivé ici.
Explications:
Mon but est le suivant:
-Demander un mot à l'utilisateur
*calculer la longueur de ce mot
-Demander un texte à l'utilisateur
*calculer la longueur de ce texte
Je condidère que le texte sera plus long que le mot.
Ensuite, à partir des deux tableaux:
tableau du mot
tableau du texte
j'aimerais pouvoir obtenir le mot de départ dans un troisieme tableau
Je souhaiterais que dans ce tableau, tant que la longueur du texte préalablement saisi n'est pas été atteinte, que le mot
du premier tableau se répète dans le dernier tableau
Exemple (ça sera plus clair):
Le mot que l'utilisateur saisi: TOTOTATA
Le texte que l'utilisateur saisi: ILFAITFROIDDEMAIN (*il fait froid demain* je ne considère pas les espaces, je décide que l'utilisateur ne les entre pas.
T O T O T A T A
I L F A I T F R O I D D E M A I N
T O TO T A T A T O T O T A T A T mon 3em tableau
Voilà ce que je souhaiterais avoir.
Voici mon code:
________________________________________________________________
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char cle[36];
char cle1[36];
char texte[36];
int i, j, LongueurClef, LongueurTexte, LongueurClef1;
printf("Saisir la clef (36 caracteres au maximum):\n");
gets(cle);
LongueurClef=strlen(cle);
printf("Saisir le texte a crypter (36 caracteres au maximum):\n");
gets(texte);
LongueurTexte=strlen(texte);
LongueurClef1=LongueurTexte;
for(i=0;i<LongueurClef1;i++)
{
cle1[i]=cle[i];
if (i>LongueurClef)
cle1[i]=cle1[i-LongueurClef];
}
cle1[i]='\0';
printf("La clef %s\n:",cle1);
system("pause");
}
_________________________________________________________________
Je ne vois pas ce qui est faux dans mon code, mais je suis sûr d'une chose, ça ne fonctionne pas.
Avec un compilateur, mon troisième tableau me donne la nouvelle clef: TOTOTATA, soit le mot saisi au départ!
Je veux bien croire que mon erreur soit dans la boucle, mais je ne vois pas pourquoi ce que j'ai fait ci-dessus ne fonctionne pas.
Si l'un de vous pouvait m'aider, ou m'apporter une solution ça serait vraiment génial.
D'avance merci.
Hugo
A voir également:
- Soucis d'un débutant en C
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Comment utiliser un ordinateur pour un débutant - Astuces et Solutions
- Apprendre le coran pour débutant (+ pdf) - Télécharger - Histoire & Religion
- Platine dj debutant - Forum Enregistrement / Traitement audio
6 réponses
Ton code est bon mais il ya une simple erreur !
---------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char cle[36];
char cle1[36];
char texte[36];
int i, j, LongueurClef, LongueurTexte, LongueurClef1;
printf("Saisir la clef (36 caracteres au maximum):\n");
gets(cle);
LongueurClef=strlen(cle);
printf("Saisir le texte a crypter (36 caracteres au maximum):\n");
gets(texte);
LongueurTexte=strlen(texte);
LongueurClef1=LongueurTexte;
for(i=0;i<LongueurClef1;i++)
{
cle1[i]=cle[i];
if (i>LongueurClef) <------------------- ici il te faut un ' { ' : l'encapsulation !!
cle1[i]=cle1[i-LongueurClef];
<------------------- là faut fermer ! pour que ta condition soit prise en charge !
}
cle1[i]='\0';
printf("La clef %s\n:",cle1);
system("pause");
}
---------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char cle[36];
char cle1[36];
char texte[36];
int i, j, LongueurClef, LongueurTexte, LongueurClef1;
printf("Saisir la clef (36 caracteres au maximum):\n");
gets(cle);
LongueurClef=strlen(cle);
printf("Saisir le texte a crypter (36 caracteres au maximum):\n");
gets(texte);
LongueurTexte=strlen(texte);
LongueurClef1=LongueurTexte;
for(i=0;i<LongueurClef1;i++)
{
cle1[i]=cle[i];
if (i>LongueurClef) <------------------- ici il te faut un ' { ' : l'encapsulation !!
cle1[i]=cle1[i-LongueurClef];
<------------------- là faut fermer ! pour que ta condition soit prise en charge !
}
cle1[i]='\0';
printf("La clef %s\n:",cle1);
system("pause");
}
Merci, j'ai donc effectué les petites retouches ci-dessus mais le problème reste entier
en fait, le programme me donne comme resultat toujours ceci
la nouvelle cled est: TOTOTATA, et je ne vois pas dans le code ce qui m'empêche d'aller au bout.
Hugo
en fait, le programme me donne comme resultat toujours ceci
la nouvelle cled est: TOTOTATA, et je ne vois pas dans le code ce qui m'empêche d'aller au bout.
Hugo
Dans cette partie de ton code (la boucle) :
for(i=0;i<LongueurClef1;i++)
{
cle1[i]=cle[i];
if (i>LongueurClef)
cle1[i]=cle1[i-LongueurClef];
}
tu voudrais substituer la longueur de la clé qui est TOTOTATA à celle de ton TEXTE !
C'est à dire répéter les caractères de la clè jusqu'a ce que sa longueur soit égale à celle du TEXTE !
C bien sa ? !!!
for(i=0;i<LongueurClef1;i++)
{
cle1[i]=cle[i];
if (i>LongueurClef)
cle1[i]=cle1[i-LongueurClef];
}
tu voudrais substituer la longueur de la clé qui est TOTOTATA à celle de ton TEXTE !
C'est à dire répéter les caractères de la clè jusqu'a ce que sa longueur soit égale à celle du TEXTE !
C bien sa ? !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ecoute ne crois pas que je ne veuilles pas t'aider mais comme tu es débutant je préfère te donner du pseudo-code pour que tu comprennes et que tu fasses le travail tout seul :
str1[36];
str2[36];
str3;
i = strlen(str1);
j = strlen(str2);
k = j - i;
str3 = str1 & str1[k];
Je crois que c'est clair là !
str1[36];
str2[36];
str3;
i = strlen(str1);
j = strlen(str2);
k = j - i;
str3 = str1 & str1[k];
Je crois que c'est clair là !
le probleme c'est que tu copie aussi le "\0" de cle ds cle1
essaye ça:
essaye ça:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char cle[36]; char cle1[36]; char texte[36]; int i, j=0, LongueurClef, LongueurTexte, LongueurClef1; printf("Saisir la clef (36 caracteres au maximum):\n"); gets(cle); LongueurClef=strlen(cle); printf("Saisir le texte a crypter (36 caracteres au maximum):\n"); gets(texte); LongueurTexte=strlen(texte); LongueurClef1=LongueurTexte; for(i=0;i<=LongueurClef1;i++) { if(cle[i]!='\0') cle1[i]=cle[i]; if (i>LongueurClef){ cle1[i-1]=cle[j];j++;} } cle1[LongueurClef1]='\0'; printf("La clef %s\n:",cle1); system("pause"); }