Programme Langage C
Hors ligneSadik971 Le 08/10/2014 à 20:33 Profil de Sadik971 Configuration de Sadik971

Salut tout le monde,

depuis peu, j'ai commencé la programmation en C, et je souhaite créer un programme se basant sur le chiffre de césar. Cependant, je n'arrive pas à savoir pourquoi mon algorithme ne laisse pas l'utilisateur entrer une donnée souhaitée et termine l'éxecution juste après le lancement. Voici ce que j'ai fait :

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

void caesar_script (int decallage, char*texte)

{

int i;

for(i=0; i<strlen(texte); i++)

{

scanf("%s\n", &i);

}

{

if ('a'<=texte[i] && texte[i]<= 'z')

texte[i]= 'a'+((texte[i]-'a')+ decallage)%26;

else

if ('A'<= texte[i]&& texte[i]<= 'Z')

{

texte[i]= 'A' + ((texte[i]-'A')+decallage)%26;

}

}

}


Merci d'avance pour vos reponses



Hors ligneAerokorbak Le 08/10/2014 à 21:32 Profil de Aerokorbak Configuration de Aerokorbak

le dernier

Salut "tout seul".

D'abord commence par utiliser les mots dans leur sens correct. Ce que tu présentes, c'est un bout de code, ce n'est pas un algorithme.

Je pensais qu'un programme C, possede un point d'entrée global du nom de "main". Je ne le vois pas. J'ai des doutes que ton compilo arrive à te generer un fichier objet et un executable avec ce bout de code.

Ensuite dans ta fonction caesar_scriopt(), il y'a une grave erreur sur l'appel de fonction scanf().

Tu veux lire une chaine (en C: un tableau de valeurs 8bits null terminée). C'est ce que tu demandes: parametre de scanf: "%s"

et tu places le résultat à l'adresse d'un integer "&i". C'est a dire que tu écrases ta propre pile ( la variable "i" est réservée dans la pile SS:[SP+offset], c'est une variable dont l'attribut est dit 'AUTO', elle est prise sur la pile). Heureusement que tu n'utilises pas d'autres variables 'LOCALES', car sinon elle seraient écrasées par ton scanf( "%s", &i ).

Utilises plutôt la fonction: gets() pour lire une chaine de caractere depuis la console.

Du plus, ton scanf() est dans ta boucle ( Pour i=0 jusqu'a la longueur de 'texte' ). Je ne comprends pas l'interêt de N lectures successives, pour mettre le résultat au même endroit. Chaque lecture, écrase la lecture précédante (dans le cas ou tu aurais écris:

scanf("%s", &adresse_d_une_chaine_C) ). Cela fait déjà beaucoup de marchotte/marchotte pas.

En sortie de boucle for, "i" il vaut combien ????

Ben il vaut strlen(texte), donc texte[ i ] il contient le zero terminal de la chaine.

Rappel: une chaine (en C: un tableau de valeurs 8bits null terminée).

Donc: texte[ i ] == '\0', donc tes tests sont toujours évalués à FAUX, tu n'y passeras jamais! ( 'a' <= '\0' ) FALSE !

Je ne sais pas ce que tu voulais faire, mais si tu nous explique, on devrait comprendre. C'est quoi le nombre de César, moi être gaulois & sans-culotte. a+

--

De la couleur, il y'en aura toujours par dessus le triste du monde...

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels