1 pièce(s) jointe(s)
Printf ne fonctionne plus
Bonjour à tous,
Je suis en train d'écrire une fonction de chiffrement en césar, et j'ai un problème ... La fonction marche sans problème, mais quand je fais appelle à la dite fonction, dans le main, et que je veux afficher le résultat avec un printf, celui-ci ne fonctionne pas. Après plusieurs tests, j'ai vu que ça fonctionnait à chaque fois sauf quandje voulais afficher la chaine de caractère qui venait de la fonction cesar ... Pour récupérer le texte au clavier, j'utilise une fonction de mon cru qui renvoie un tableau qui a exactement la taille voulue ! Je met le fichier source en PJ si vous voulez.. Voici donc le CS de la fonction de saisie :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
char *saisie(void)
{
char *tab = NULL;
tab = malloc(1000 * sizeof(char));
if(tab)
{
fgets(tab, 999, stdin); /* Pour pourvoir placer le '\0' */
if((strchr(tab, '\n')) == NULL) /* Si le texte est trop grand pour le tableau */
{
tab = utilBuffer(tab);
if(tab == NULL)
return NULL;
}
else if (strlen(tab) != 999) /* Si le tableau est trop grand pour le texte */
{
tab = realloc(tab, strlen(tab) * sizeof(char));
}
return tab;
}
else
return NULL;
}
char *utilBuffer(char *tab)
{
char *temp = malloc(500 * sizeof(char));
if(temp == NULL)
return NULL;
size_t size;
fgets(temp, 499, stdin);
if((strchr(temp, '\n')) == NULL)
{
temp = utilBuffer(temp);
}
size = (strlen(tab) + strlen(temp)) * sizeof(char);
tab = realloc(tab, size); /* On réajuste le tableau */
strcat(tab, temp); /* On rajoute */
return tab;
} |
Celui de la fonction qui convertit les valeurs en nombres ASCII :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
int conversionAscii(char lettre)
{
int nombre = -1; /* Contiendra la valeur ASCII */
nombre = (int) lettre; /* On cast lettre pour qu'il nous donne la valeur ASCII de sa lettre*/
/* On vérifie si 'nombre' est bien un code de la table ASCII*/
if(!isascii(nombre))
return -1;
else
return nombre;
} |
La fonction de cryptage :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
char* cesar(void)
{
int i = 0;
char *texte = malloc(100); /* Texte à crypter ou décrypter */
char *result = NULL; /* Texte crypter ou décrypter */
int *valeurAscii = NULL; /* Tableau contenant les valeurs Ascii des lettres de 'texte' */
long decalage = 3; /* Décalage à opérer */
texte = saisie();
result = malloc(sizeof(*texte));
valeurAscii = malloc(strlen(texte) * sizeof (int));
for(i = 0; texte[i]; i++)
{
valeurAscii[i] = conversionAscii(texte[i]);
if(valeurAscii[i] + decalage > 255) /* Si jamais la valeur ASCII est trop grande */
valeurAscii[i] = (valeurAscii[i] + decalage) - 255;
else
valeurAscii[i] = valeurAscii[i] + decalage;
result[i] = toascii(valeurAscii[i]);
}
return result;
} |
et voila la fonction principale :
Code:
1 2 3 4 5 6
|
int main()
{
printf("%s", cesar());
return 0;
} |
Je suis sur que la fonction marche car j'ai fait un fprintf dans un fichier texte, et ça ma donné le bon crypt. Si vous voulez plus de précisions je suis à votre service !
Merci,