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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#if 0
/* -ed- Je deconseille les prototypes separes pour le fonctions non exportees */
/* Déclaration de la fonction sleep */
void sleep (int nbr_seconds);
/* Déclaration de la fonction cesar */
void cesar (char *str, int decalage);
#endif
/* -ed- reorganisation du code. */
/* Pause pendant un nombre de secondes déterminé */
static void sleep (int nbr_seconds)
{
clock_t goal;
goal = (nbr_seconds * CLOCKS_PER_SEC) + clock ();
while (goal > clock ())
{
; /* loop */
}
}
/* Cryptage selon la méthode de César */
static void cesar (char *str, int decalage)
{
const char alphabet[] =
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z'
};
while (*str)
{
int i;
for (i = 0; i < 26; i++)
{
if (alphabet[i] == *str)
{
*str = alphabet[(i + decalage) % 26];
break;
}
}
str++;
}
}
/* -ed-
void main( void )
main() retourne int. Toujours
*/
int main (void)
{
/* -ed-
char *str ;
str = "bonjour" ;
Une chaine n'est pas modifiable.
Il faut le qualificateur const ou utiliser une tableau de char.
Si j'en crois la suite, la chaine sera modifiee par la fonction de cesar().
Il faut donc un tableau.
*/
char str[] = "bonjour";
int decalage = 2;
/* -ed-
cesar ( *str , decalage );
*str est un char.
Or la fonction attend l'adresse d'un char. C'est probablement :
*/
cesar (str, decalage);
/* -ed-
while (*str)
{
printf ("%c",* str) ;
str++ ;
}
Une facon inutilement complexe d'ecrire
(\n et '' ajoutes pour la clarete de la presentation)
*/
printf ("'%s'\n", str);
#if 1
/* -ed- tres joli, mais hors-sujet, non ?) */
{
int x;
int wait = 13;
/* Pause pendant un nombre de secondes déterminé. On affiche *
* un point pour chaque seconde de pause. */
printf ("Pause pendant %d secondes\n", wait);
printf (">");
for (x = 1; x <= wait; x++)
{
printf ("."); /* affichage d'un point */
fflush (stdout); /* on force l'affichage du point sur les */
/* machines qui utilisent la mémoire tampon */
sleep ((int) 1); /* pause d'une seconde */
}
}
printf ("Fin !\n");
#endif
/* -ed- parce que main() retourne un int : */
return 0;
} |
Partager