Pouvez-vous me dire pourquoi la sortie de ce programme est C'était ma question d'examen. P> abbbcde code>?
#include <stdio.h>
int main (void)
{
int i;
for (i = 0; i < 2; i++)
{
printf ("A");
for (; i < 3; i++)
printf ("B");
printf ("C");
for (; i < 4; i++)
printf ("D");
printf ("E");
}
return 0;
}
3 Réponses :
int main (void) { int i; for (i = 0; i < 2; i++) { printf ("A"); // prints once for (; i < 3; i++) { printf ("B"); // i = 0 at beginning, and loops until i = 2 => 3 times } printf ("C"); // prints once for (; i < 4; i++) { printf ("D"); // i = 3 at beginning, so it prints once } printf ("E"); // prints once } // next loop, i is already 4, which is more than 2, so first loop stops return 0; }
Si vous indentez le code correctement, cela vous aidera à comprendre ce qui se passe:
#include <stdio.h> int main(void) { int i; for (i = 0; i < 2; i++) { printf("A"); // prints A 1 time, i is still 0 for (; i < 3; i++) // prints B 3 times, i will now be 3, the cycle ends printf("B"); printf("C"); // prints C 1 time, this is not in any inner loop for (; i < 4; i++) // prints D once, as i is 3, the cycle only runs once printf("D"); printf("E"); // again prints E once } // as i is 4 the cycle will end, the condition is i < 2 return 0; }
Parce que vous avez une boucle pour que vous vérifiez si je suis moins de trois. Il commence à zéro, zéro est inférieur à trois de sorte qu'il imprime B une fois, il en ajoute un à I et je l'en devient un, qui est toujours inférieur à trois, il imprime un autre B. puis il annonce un à moi , qui est toujours inférieur à zéro, ce qui la fait imprimer B une troisième fois. Ensuite, cela en ajoute un autre à I, ce qui en fait trois, ce qui n'est pas inférieur à trois, donc il continue le programme en tapant c. P>
Parler de manière informelle, sans bretelles, le corps du
pour code> boucle est la ligne suivante
Cela me semble évident, il est donc difficile de l'expliquer. Il serait plus facile d'expliquer où vous vous trompez si vous avez dit ce que vous B> pensait que la production devrait être.
Écrivez
i = 0 code> sur un morceau de papier. Ensuite, passez par la ligne de code par ligne, en ajoutant les caractères et mettez à jour la valeur que vous avez écrite chaque fois que
i code> est incrémenté.
Adam a édité mon code, merci. Ce code a du sens maintenant.
@Turuudo: Bien que cela change quelque peu la question. Pourquoi ne pas modifier la question à
int main () {printf ("abbbcde");} code>?
@Adam j'ai retourné votre édition. Vous ne devriez pas "expliquer" le code en modifiant la question.
@Bathsheba - Dites-vous que la réponse acceptée sur le lien que vous avez fourni est incorrecte?
@Melebius - C'est le seul moyen d'expliquer le code et les résultats qu'il obtiendra.
@Adam Non, vous devriez écrire une réponse pour expliquer le code. Ne pas rendre la question non pertinente en le modifiant.
@songyuanyao: Dans ce cas, je pense que je vais raccrocher mes outils pour la journée et dirigez-vous pour un beau déjeuner long. J'ai appris quelque chose de nouveau aujourd'hui. Drôle j'avais ceci dans ma tête que
int principal (void) code> était valide c mais non valide c ++
Je vais nettoyer certains de mes commentaires.
@Bathsheba pour que tu les penses le contraire. Heureux de savoir que je ne manque pas quelque chose. :)
@Adam J'ai initialement affiché une réponse en réponse à votre version modifiée de la question, qui, dans Retrospect, n'a pas eu de sens donné ce qu'ils avaient demandé à l'origine. C'était une perte de temps de mon temps. La bonne façon de répondre à la question de quelqu'un est de poster une réponse.
@songyuanyao: Ce que je dois faire, c'est de relire Stroustrup Methinks.
Ceci est uniquement Code de langue C. J'ai ajouté C ++ Hash Cause je pensais que ma question recevrait plus de popularité.
@Thomassablik C ++ fournit à la fois
stdio.h code> et
cstdio code>. Y compris
stdio.h code> vous donne
printf code> dans l'espace de noms global tandis que
cstdio code> vous donne
printf code> dans le
STD CODE> Espace de noms (et la mise en œuvre est définie s'il le traite également dans l'espace de noms global). Il est donc techniquement valide C ++. Cela dit, c'est certainement aussi valable C et je suis d'accord, il était probablement ciblé C.
@Turuudo Veuillez ne pas utiliser de balises non liées, surtout de ne pas recevoir plus de popularité - il s'agit d'une mauvaise utilisation! Les balises sont utilisées pour spécifier la question de la question. Si vous utilisez la balise C ++ pour une question C, vous pouvez obtenir une réponse C ++ qui ne fonctionnera pas dans C.
@Melebius d'accord, je garderai ça à l'esprit.