Des pointeurs plutôt que des réponses directes si vous voulez.Pourquoi "a" met-il prématurément fin à cette boucle?
Cette boucle effectue une manipulation sur les caractères et génère un texte chiffré c
basé sur une clé k
et du texte en clair p
. Lorsque 'a' ou 'A' apparaît dans le texte en clair, le programme affichera cette lettre comme prévu, mais mettra fin prématurément à la boucle.
p
devient tout à coup un seul caractère long, ce caractère étant 1.
while (i < strlen(p))
{
char stdp = p[i];
char stdk = k[j];
if (isalpha(stdp))
{
if (islower(stdp))
{
p[i] = stdp - 'a';
Aa = 0;
}
else
{
p[i] = stdp - 'A';
Aa = 1;
}
if (islower(k[j]))
{
k[j] = stdk - 'a';
}
else
{
k[j] = stdk - 'A';
}
}
if (isalpha(stdp))
{
c[i] = ((p[i] + k[j]) % 26);
}
else
{
c[i] = p[i];
}
if (isalpha(stdp))
{
if (Aa == 1)
{
c[i] = c[i] + 'A';
}
else if (Aa == 0)
{
c[i] = c[i] + 'a';
}
}
if (isalpha(stdp))
{
if (j + 1 == kk)
{
j = (j + 1) % kk;
strcpy(k, argv[1]);
}
else
{
j++;
}
}
i++;
}
Voici le meilleur pointeur que vous obtiendrez: utilisez un débogueur pour suivre l'exécution de votre programme. Si vous avez encore besoin d'aide, veuillez fournir un [mcve]. – kaylum
'while (i
Étant donné que la valeur d'un caractère dans 'p' peut affecter la fin de la boucle, il n'est pas recommandé de modifier l'un de ses caractères lorsque cela est possible. –