Sign in to follow this  

'Continue' statement usage?

This topic is 1814 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi,

 

A probably fairly simple question, but I seem to have usef the c++ 'continue' statement incorrect.

What I do is the following (pseudo code)

 

for(materials=0;materials<nrMaterials++materials)

{

    for(meshes=0;mesh<nrMeshes;++meshes)

    {

        if(materials[material].index[meshes].uses = false) continue;

        // otherwise do thing with this mesh

    }

}

 

What I try to achieve is that 'continue' stops the iteration for meshes[m] and goes to the next iteration in this for loop, meshes[m+1].

From debugging it looks like it's not doing that.

 

Any ideas/ suggestions on what I might be doing wrong?

 

Share this post


Link to post
Share on other sites
= should be ==? or is that just an error in your post?

Maybe you should post the full code i cant see anything wrong with the current one apart from the syntax errors... Edited by Waterlimon

Share this post


Link to post
Share on other sites
The problem here is that you are using = instead of == (unless this was a typo), so that materials[material].index[meshes].uses = false will actually evaluate to the expression on the right-hand side of the equals sign. This means that the if statement's condition will never evaluate as true and so the continue statement won't be executed.

Share this post


Link to post
Share on other sites

cozzie, on 28 Jan 2013 - 12:50, said:
for(materials=0;materials<nrMaterials++materials)

The for condition is invalid AFAIK.

cozzie, on 28 Jan 2013 - 12:50, said:
for(meshes=0;mesh<nrMeshes;++meshes)

There's no mesh mentioned earlier in your pseudocode.

cozzie, on 28 Jan 2013 - 12:50, said:
if(materials[material].index[meshes].uses = false) continue;

The = is an assignment, not an equality operator
There's no material mentioned earlier in your pseudocode.
materials is not an array

Please, even when posting pseudocode, be consistent.
We cannot see what the problem is if you obscure it in typos.
Also, when it's a small snippet of code which has flow errors, it's probably better just to post the code. Edited by SuperVGA

Share this post


Link to post
Share on other sites

Thanks, I'll check the real code to see if the '=' is OK in the real code.

Maybe it's also a good idea to do what nightcreature mentioned (also more readable).

Share this post


Link to post
Share on other sites

++ for NightCreature's post: don't test a boolean against true or false, just test the boolean. The boolean itself *is* true or false. If your bool variables are named sensibly the code is more readable without the comparison. Use the 'not' operator to test for false, i.e. if (!something.isDead()) ...

Share this post


Link to post
Share on other sites

Got it, it was not the continue statements causing all the unneccesary state changes, but me running the same function for blended mesh instances going through each effect, material and mesh.

 

The real code was/ is:

 

			for(mat=0;mat<mRenderQueue.mNrMaterials;++mat)
			{
				if(!mRenderQueue.MatUsesEffect(fx, mat)) continue;
				if(!pD3dscene->PreSelectMaterial(mat, fx)) return false;							// 2x SetFloatArray, 1x SetTexture									   							
				for(m=0;m<mRenderQueue.mMaterialData[mat].nrMeshes;++m)		
				{
					mesh = mRenderQueue.mMaterialData[mat].meshIds[m];
					if(!mRenderQueue.MeshUsesEffect(fx, mesh)) continue;
					if(!pD3dscene->mMeshes[mesh].SetBuffers(mD3ddev)) return false;					// 1x SetStreamSource, 1x SetIndices

I might change the 'continue' style by making it more readble

 

if(......)

{

    do stuff

}

 

instead of if(!...) continue;

 

Now off the fix my indices for going through blended mesh instances.

Share this post


Link to post
Share on other sites

This topic is 1814 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this