[Language C]Besoin d'aide pour crypteur Merci

Bob -  
 Bob -
Bonjour,
Je suis entrain d'écrire un programme qui va crypter un texte mais j'ai une erreur. Pourriez-vous m'aider, s'il vous plait.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char text[10000];
char keycode[100];
char *buf;
int i=0,j=0;
char temp[1024];

int main(int argc, char *argv[]) {
printf("bonjour");
scanf(" %s", &text); 
Replacing(keycode,  b);
printf(buf);

return (0);
}

char Replacing(char to_search, char to_replace_with){
   while(text[i] !='\0')
    {
    if(text[i] == to_search )
    {
    temp[j] = to_replace_with;
    i++;
    j++;
    }
    else
    temp[j++] = text[i++];
    }
    temp[j] = '\0';
    buf = (char *) malloc(strlen(temp) + 1);
    strcpy(buf,temp);
    
    return buf;
    }


merci d'avance.

4 réponses

youz
 
Et lorsque tu lui passe tes parametres, b est une variable ? Ou le caractere b ?
Si c'est la deuxieme option, c'est 'b', et non pas b.
Et ton retour de ta fonction Replacing n'est pas bon. Tu retourne buf qui est un char * alors que dans la définition de ta fonction, tu retourne un char.
c'est :
char *Replacing(...){
...
}
Pareil pour les arguments que tu lui passe, (char to_search, ...), or lorsque tu l'appelle, tu lui passe keycode qui un un char[100].

De ce fait, ta comparaison 'if (text[i] == to_search)', est fausse.

Et pour finir,
les globales,
c'est MAL.
;).
Cdlmt.
2
youz
 
Salut,
j'ai pas testé ton code, mais a vue d'oeuil je te dirais de placer ta fonction Replacing avant ton main :).
Cdlmt.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
inutile. En revanche, il faut déclarer la fonction avant le main.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Pas mal de mauvaises habitudes fans ce code.
Evite les variables globales.
Ce n'est pas printf(bug) mais printf("%s", buf);
Si tu ne mets pas de saut de ligne, tu dois mettre un fflush(stdout);
Pas besoin de parenthèse pour return(0) : ce n'est pas une fonction.
Verifie la valeur de retour de malloc sinon tu peux avoir de mauvaises surprises.
Pas d'espaces avant %s dans le scanf. Pas de & non plus pour là variable text.
Je m'arrête là. Prends en compte tout ça et reposte le code dans les balises code.
Et mets les messages d'erreur du compilo si t'en a.
0
Bob
 
Bonjour. Cela fonctionne à moitié. Tout de suite après un espace il arrête.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char text[10000];
char *buf;
int i=0,j=0;
char temp[1024];

char *Replacing(char to_search, char to_replace_with){
   while(text[i] !='\0')
    {
    if(text[i] == to_search )
    {
    temp[j] = to_replace_with;
    i++;
    j++;
    }
    else
    temp[j++] = text[i++];
    }
    temp[j] = '\0';
    buf = (char *) malloc(strlen(temp) + 1);
    strcpy(buf,temp);
    
    return buf;
    }

int main(int argc, char *argv[]) {
printf("Welcome \n");
scanf(" %s", text); 
Replacing('a',  'b');
printf("%s", buf);

return (0);
}



Si j'écris par exemple salut les amis, ça va afficher juste sblut. Pourriez-vous m'aider s'il vous plait. Cela serait gentil.
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Faut utiliser fgets plutôt sur scanf.
0
Bob
 
d'accord, merci.
0