thedivxboy
Messages postés15Date d'inscriptionmercredi 3 novembre 2004StatutMembreDernière intervention27 novembre 2004
-
16 nov. 2004 à 22:08
thedivxboy
Messages postés15Date d'inscriptionmercredi 3 novembre 2004StatutMembreDernière intervention27 novembre 2004
-
20 nov. 2004 à 15:33
Pourquoi ce code plante quand je mets un scanf ?
Et pourquoi lorsque je retire 27 au résultat crypté si il dépasse l'alphabet, cela m'affiche des caractères bizarres ?
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 16 nov. 2004 à 22:21
"void main(){" => déja la c'est pas bon, c'est
int main(void){
enfin le void en argument n'est pas obligatoire...
ensuite on a pas besoin de l'alphabet, on se sert des codes ascii...
"&&phrase[i]!='\0'"=> totalement inutile
et sinon pour coder c'ets plus simple et plus rapide comme ça...
for (i=0;i<sizeof(phrase);i++) {
phrase[i]+=code;
}
printf("%s",phrase);
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 16 nov. 2004 à 22:28
au fait, coucou747, au lieu de mettre sizeof(phrase) en condition de fin de boucle, j'utiliserais la fonction strlen(phrase) pour éviter de mettre &&phrase[i]!='\0'
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 16 nov. 2004 à 22:52
exact mais j'ai pas pensé sur le coup, en fait c'est même totalement diférent car sizeof renveras le nombre de cases du tableau, alors que la chaine n'utilises pe pas tout le tableau...
Vous n’avez pas trouvé la réponse que vous recherchez ?
thedivxboy
Messages postés15Date d'inscriptionmercredi 3 novembre 2004StatutMembreDernière intervention27 novembre 2004 16 nov. 2004 à 23:49
Wow wow wow que de réponses en si peu de temps :)
Bon alors le void main() { } c'est comme ça qu'on me l'a appris. Donc donnez plus d'explications pour que je comprenne la différence.
"&&phrase[i]!='\0'" --> ça aussi on me l'a appris, mais je pense qu'il est nécessaire sinon il va aussi transformer les 0 de la table phrase ...
Ta façon de coder en ASCII n'est pas logique car si je rentre la lettre Z (90 en ASCCI) et que je lui applique un décalage de 5 je vais me retrouver avec _ (95 en ASCII) au lieu de E. Voilà pourquoi j'utilise l'alphabet dans une variable.
Je sais que le &phrase n'est pas obligatoire mais bon c'est plus lisible comme ça :big)
Quand au ; après le for c'est voulu puisque celui-ci ne contient aucune instructions. Donc de point-virgule stipule la fin du for. Corrigez moi si je me trompe ...
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 17 nov. 2004 à 00:00
ok j'avais à peine lu le code, désolé...
pour le int main(), disons que c'est une norme mais le void main(void) fonctionne également (quelques compilateurs le refuseront peut-être, il y a toujours des exceptions)...
au sujet du &phrase, tu ne m'as pas compris :
scanf("%s",phrase) -> ça marche
scanf("%s",&phrase) -> ça marchera pas
il n'y a aucune question de lisibilité la-dedans...
enfin pour strlen(phrase), c'est une fonction qui te renvoie la longueur d'une chaîne de caractères (jusqu'au zéro final), elle remplace donc aisément une boucle qui le cherche en incrémentant un entier...
laisse moi le temps de zyeuter ton code d'un peu plus près et je t'envoie une réponse concernant tes caractères bizarres après le "passage à la moulinette" de ta phrase
cs_6co
Messages postés114Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention 5 avril 20121 17 nov. 2004 à 00:12
ton code semble fonctionner...
le seul problème est que getchar() ne te laisse pas prendre le temps de choisir une clé, non ? alors il prends la valeur de la touche [ENTRER] et comme tu enlèves 48 à cette valeur, ça te laisse une valeur négative...
remplace getchar() par getch(), il faut inclure <conio.h> ou <coinio.c> sous dev++
je viens de me rendre compte que void main() ne passe pas sous dev++ par exemple....