IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Printf ne fonctionne plus


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Malikemal
    Invité(e)
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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,
    Fichiers attachés Fichiers attachés
    Dernière modification par Malikemal ; 05/06/2011 à 15h18.

Discussions similaires

  1. CSS ne fonctionne plus depuis le passage au XHTML
    Par Cr@zyDeep dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 27/09/2005, 14h42
  2. recordcount ne fonctionne plus
    Par Oluha dans le forum ASP
    Réponses: 1
    Dernier message: 26/09/2005, 14h24
  3. Réponses: 2
    Dernier message: 22/06/2005, 13h07
  4. mes requetes sous access ne fonctionnent plus
    Par trialrofr dans le forum ASP
    Réponses: 12
    Dernier message: 04/12/2004, 21h52
  5. [JSP][Tomcat]Changement de context -> JSP fonctionne plus
    Par mathieu dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 01/03/2004, 08h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo