0
votes

Pourquoi faire pour la boucle ne fonctionne pas lorsque j'utilise des opérations d'incrément pour les tableaux

J'ai deux tableaux dans mon code, chacun d'entre eux dispose de 7 éléments, j'ai utilisé une boucle:

for (int i = 0; i < 7; i++)
{
    distance = x[++i] - x[i];
    area = trapezoidArea(distance, y[++i],y[i]);
    sum += area;
}


3 commentaires

Indice: ++ n'est pas le même que + 1 .


Trouvez la ligne de votre programme par ligne (mentalement ou avec un débogueur) et considérez les valeurs de vos variables (en particulier i ) à chaque fois.


Vous augmentez i trois fois dans la boucle. Êtes-vous sûr de vouloir faire ça?


3 Réponses :


1
votes

++ i augmente i . Donc, vous augmentez i trois fois en une course à travers la boucle et, en plus de cela, il pourrait également être un comportement indéfini en raison de la séquençage. Quel est le i dans x [i] supposé être? Le i avant le ++ i dans x [++ i] augmentait, ou après avoir été augmenté?

Si vous voulez un de plus que i sans augmenter, do i + 1 à la place. Remplacement de x [++ i] avec x [i + 1] et de même avec y [++ i] devrait corriger ce problème. Mais sans voir tout votre code, il est impossible de dire si c'est le seul problème.


0 commentaires

4
votes

Vous ne pouvez pas utiliser ++ comme opérateur de poste ou de pré-augmentation dans ce cas. de
Cela modifiera la valeur de votre variable i , et donc votre pour boucle n'a pas le comportement souhaité. de
La manière appropriée serait:
xxx

Soyez prudent que vous devez faire boucle jusqu'à ce que i <6 parce que si vous laissez 7, vous allez essayer d'accéder à x [7 + 1] Â = x [8], et vous aurez comportement non défini ou défaut de segmentation .


0 commentaires

0
votes

Lorsque vous faites ++ i sur les crochets, vous incrémentez réellement la valeur de i par un. Ce que vous devriez faire, c'est i + 1 et laisser ++ i uniquement dans la déclaration de boucle.


0 commentaires