Je ne sais pas pourquoi cela me donne des ordures: qui me donne: p> Les indices ont l'air correcte et Même l'affectation à l'intérieur de la boucle est correcte (par exemple, éditer, après quelques réponses avec printf ("% i \ n", a [0]) code> donne 1 code> qui est correct, après la boucle). Mais à l'intérieur du corps de la boucle, le Printf, malgré les indices corrects, donne des valeurs erronées (quelques ordures). Pourquoi est-ce? P> ... && (a [i] = i) code>, j'ai essayé de le faire avec d'autres déclarations: P > warning: value computed is not used [-Wunused-value]
i++ && printf("%i\n",a[i])
3 Réponses :
faire
for(int i = 0; (i < sizeof(a)/sizeof(*a)) && (a[i]=i+1); ++i) {
printf("%i:%i\n", i, a[i]);
}
Voir mon édition s'il vous plaît. J'ai changé la dernière expression dans la tête, mais n'imprime rien. Comment résoudre ce problème?
@milanhrabos relire ma réponse où je dis: Remarque (a [i] = i + 1) code> n'est pas faux car les valeurs au moins 1, au cas où vous vouliez faire a [i] = i code> le test à utiliser peut être (i
A Exemple: p> L'ordre d'exécution est tel que je l'énuméra ci-dessus. p> dans votre exemple, P> < Pré> xxx pré> pour code> boucle est composé de 4 parties:
i = 1 code> li>
i ++ <10; code> -> 0 <10 = true code>, i = 1 code> li> li>
printf code> tandis que i = 1 code>, a [0] code> est toujours a [i-1] = i code>, a [0] = 1 code> (uniquement maintenant a [0] code> est initialisé ! li>
ol> p>
Dans votre code, vous exécutez d'abord le code entre crochets, puis vous affectez le tableau. Il doit être fait la bonne voie opposée. HTTPS: / /godbolt.org/z/r-dvji p> ou meilleur p>
pour (int i = 0; i ++ <10 && (i-1] = i); printf ("% i \ n", [I-1])); code> est le meilleur option
Je ne savais pas que je peux assigner comme une "vraie" condition, semble comme une magie
@milanhrabos en fait dans la première option (non existante dans la réponse), j'ai commis une erreur. Généralement c'est un UB
Voir mon édition. J'ai changé la dernière expression en boucle, mais en vain
i ++ doit aller de la condition
pourquoi faut-il? Je ne peux pas augmenter chaque fois que je veux? (Et donc à la fin de la boucle de corps, comme de l'expression du patauge dans la boucle du corps)?
"Donne des valeurs erronées" - Quelles sont les valeurs correctes i>?
1,2,3,4,5,6,7,8,9,10
Savez-vous que le fait que
a [] code> n'est pas initialisé! Donc, il contient de bonnes valeurs détruites!Vous imprimez d'abord une valeur non initialisée et n'attribuez qu'une valeur valide.
vous faites
a [i-1] = i code> après b> vous l'avez imprimé, de manière aussi tardiveMais pourquoi, si j'imprime après la boucle par exemple
printf ("% i \ n", a [0]) code> obtenez1 code>?@milanhrabos in
pour (A; b; c) {corps] code> Le formulaire C est effectué après i> l'exécution du corps, et vous définissez chaque entrée en C mais imprimez-la dans le corps@bruno vous a raison. J'ai donc essayé de donner une valeur à
A [0] = 1 code> avant la boucle (ainsi d'initialiser le premier élément, le reste donne lei code>) mais en vain@milanhrabos également votre code est "compliqué" car vous augmentez i i> trop tôt dans la partie de test plutôt que dans la partie C
@milanhrabos J'ai mis une réponse avec une méthode "standard", mais aussi un moyen de ne pas mettre l'initialisation de la matrice dans le corps du
pour code> mais je ne recommande pas de faire ça ^^@bruno pourquoi est possible de traiter l'affectation comme une condition "vraie" (après
&& code>)?@milanhrabos Une affectation Valeurs de la valeur attribuée (à partir d'une coulée éventuelle), donc l'affectation de 1 puis 2 puis 3 etc il n'est jamais 0 (supposons sans débordement) si jamais fausse. regarde ma réponse pour un autre cas
@milanhrabos a lu ma réponse et vous comprendrez pourquoi
mais qui n'imprime rien code>@bruno, pourquoi y a-t-il toujours de la lutte de qui donner le score plus? Vous êtes tous assez expérimentés et avez beaucoup de score, mais il y a toujours les combats, je ne l'obtiens pas. Le Stackoverflow devrait donner une solution pour mettre fin à cette guerre sans fin. Je vous le donnerai, mais la raison était que j'attendais d'améliorer ma propre solution, que p__j__ a fait comme premier. Mais oui, vous avez ajouté cela aussi. Ok, pour cette période
@bruno, je n'ai que 50 points, mais ne me soucie pas. Vous avez plus de 24k réputation et vous voulez toujours plus, alors quel est le point? Quelle est la motivation de cela? Cela n'a pas de sens
@milanhrabos est à la fois de jouer et également si vous choisissez une réponse qui signifie que le choisi est le "meilleur" => Les gens écrivant d'autres réponses peuvent être d'accord avec cela (et parfois une autre réponse, même je me réponds) ou ne comprenez pas pourquoi, et considère que ce n'est pas "juste". Notez que vous pouvez également UV l'autre réponse (s) pour remercier leur auteur