By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,626 Members | 2,202 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,626 IT Pros & Developers. It's quick & easy.

There is no "continue" for switch?

P: n/a
xz
What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...
}
I thought using "continue" to implement this but got this:

continue statement not within a loop

Mar 18 '08 #1
Share this Question
Share on Google+
13 Replies


P: n/a
In article <7864a589-19a7-458d-99cd-
26**********@x41g2000hsb.googlegroups.com>, zh*********@gmail.com
says...
What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...
}
Correct -- continue works for loops by not switches. Fortunately you
don't need anything quite that difficult:

switch (v.size()) {
case 6:
// somehow delete two element (sic)
case 4:
// somehow delete two element
case 2:
// do something
}

If there isn't a break at the end of a block, execution will flow
through to the next block...

--
Later,
Jerry.

The universe is a figment of its own imagination.
Mar 18 '08 #2

P: n/a
On 3月18日, 下午11时46分, xz <zhang.xi...@gmail.com>wrote:
What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...

}

I thought using "continue" to implement this but got this:

continue statement not within a loop
please detail your intent.
Mar 18 '08 #3

P: n/a
xz
On Mar 18, 10:57 am, Jerry Coffin <jcof...@taeus.comwrote:
In article <7864a589-19a7-458d-99cd-
2611d772e...@x41g2000hsb.googlegroups.com>, zhang.xi...@gmail.com
says...
What if I want the following:
vector<intv;
// v is loaded by push_back()
switch( v.size() ) {
case 2:
//do something
case 4:
//somehow delete two element
//and then do the same thing as in case 2
case 6:
//somehow delete two element
//and then do the same thing as in case 4
default:
//...
}

Correct -- continue works for loops by not switches. Fortunately you
don't need anything quite that difficult:

switch (v.size()) {
case 6:
// somehow delete two element (sic)
case 4:
// somehow delete two element
case 2:
// do something

}

If there isn't a break at the end of a block, execution will flow
through to the next block...
well, I gave a case not so tough, what if a case a little tougher?

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete *four* element
//and then do the same thing as in case 2

default:
//...

}

i.e. I want to go to case 2 both after I treat the case 4 and case 6.

>
--
Later,
Jerry.

The universe is a figment of its own imagination.
Mar 18 '08 #4

P: n/a
On 3月19日, 上午12时21分, xz <zhang.xi...@gmail.com>wrote:
On Mar 18, 10:57 am, Jerry Coffin <jcof...@taeus.comwrote:
In article <7864a589-19a7-458d-99cd-
2611d772e...@x41g2000hsb.googlegroups.com>, zhang.xi...@gmail.com
says...
What if I want the following:
vector<intv;
// v is loaded by push_back()
switch( v.size() ) {
case 2:
//do something
case 4:
//somehow delete two element
//and then do the same thing as in case 2
case 6:
//somehow delete two element
//and then do the same thing as in case 4
default:
//...
}
Correct -- continue works for loops by not switches. Fortunately you
don't need anything quite that difficult:
switch (v.size()) {
case 6:
// somehow delete two element (sic)
case 4:
// somehow delete two element
case 2:
// do something
}
If there isn't a break at the end of a block, execution will flow
through to the next block...

well, I gave a case not so tough, what if a case a little tougher?

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete *four* element
//and then do the same thing as in case 2

default:
//...

}

i.e. I want to go to case 2 both after I treat the case 4 and case 6.


--
Later,
Jerry.
The universe is a figment of its own imagination.- 隐藏被引用文字 -

- 显示引用的文字 -- 隐藏被引用文字 -

- 显示引用的文字 -
void f()
{
// do something
}

....
vector<intv;
// v is loaded by push_back()
switch( v.size() ) {
case 2:
f();//do something
break;
case 4:
//somehow delete two element
f();//and then do the same thing as in case 2
break;
case 6:
//somehow delete *four* element
f();//and then do the same thing as in case 2
break;

default:
//...
}

Mar 18 '08 #5

P: n/a
well, I gave a case not so tough, what if a case a little tougher?

vector<intv;

// v is loaded by push_back()
while(v.size() != 2)
{
switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete *four* element
//and then do the same thing as in case 2

default:
//...

}
}
i.e. I want to go to case 2 both after I treat the case 4 and case 6.

Or if you _always_ want to delete elements until the size is 2, I
wouldn't use a switch at all.

while(v.size() != 2)
{
// Determine which element to delete
// delete it
}

Mar 18 '08 #6

P: n/a
xz wrote:
What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...
}
I thought using "continue" to implement this but got this:

continue statement not within a loop
I believe you should rearrange your clauses and make '6' and
'4' fall through to the '2':

switch (v.size()) {
case 6:
// somehow delete 2 elements
// and FALL THROUGH
case 4:
// somehow delete 2 elements
// and FALL THROUGH
case 2:
// do something
break; // Yes, only here

default:
//...
}

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Mar 18 '08 #7

P: n/a
xz wrote:
What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...
}
I thought using "continue" to implement this but got this:

continue statement not within a loop
Of course there is a continue for switch (for your example else-thread):

#include <iostream>

void f(uint8_t n)
{
std::cout << n << '\n';
switch(n) {
for(;;) {
case 2:
std::cout << "do_something\n";
break;
case 4:
std::cout << "somehow delete 2 elements\n";
continue;
case 6:
std::cout << "somehow delete 4 elements\n";
continue;
default:
std::cout << "default\n";
break;
}
}
}

int main()
{
f(2);
f(4);
f(6);
f(1);
}

HTH,
Paul
Mar 18 '08 #8

P: n/a
Paul Brettschneider wrote:
xz wrote:
>What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...
}
I thought using "continue" to implement this but got this:

continue statement not within a loop

Of course there is a continue for switch (for your example else-thread):

#include <iostream>

void f(uint8_t n)
{
std::cout << n << '\n';
switch(n) {
for(;;) {
case 2:
std::cout << "do_something\n";
break;
case 4:
std::cout << "somehow delete 2 elements\n";
continue;
case 6:
std::cout << "somehow delete 4 elements\n";
continue;
default:
std::cout << "default\n";
break;
}
}
}

int main()
{
f(2);
f(4);
f(6);
f(1);
}
Of course this doesn't do what you what it to do - it doesn't recompute the
label to jump to. Sorry, I'm tired.
Mar 18 '08 #9

P: n/a
Paul Brettschneider wrote:
Paul Brettschneider wrote:
>xz wrote:
>>What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...
}
I thought using "continue" to implement this but got this:

continue statement not within a loop

Of course there is a continue for switch (for your example else-thread):

#include <iostream>

void f(uint8_t n)
{
std::cout << n << '\n';
switch(n) {
for(;;) {
case 2:
std::cout << "do_something\n";
break;
case 4:
std::cout << "somehow delete 2 elements\n";
continue;
case 6:
std::cout << "somehow delete 4 elements\n";
continue;
default:
std::cout << "default\n";
break;
}
}
}

int main()
{
f(2);
f(4);
f(6);
f(1);
}

Of course this doesn't do what you what it to do - it doesn't recompute
the label to jump to. Sorry, I'm tired.
Here is the correct solution (I think):

#include <iostream>

void f(int n)
{
std::cout << n << '\n';
for(;;) {
switch(n) {
case 2:
std::cout << "do_something\n";
break;
case 4:
std::cout << "somehow delete 2 elements\n";
n -= 2;
continue;
case 6:
std::cout << "somehow delete 4 elements\n";
n -= 4;
continue;
default:
std::cout << "default\n";
break;
}
break;
}
}

int main()
{
f(2);
f(4);
f(6);
f(1);
}

Mar 18 '08 #10

P: n/a
In article <01db3ce8-2e5e-470d-a892-
0e**********@b1g2000hsg.googlegroups.com>, zh*********@gmail.com says...

[ ... ]
well, I gave a case not so tough, what if a case a little tougher?

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete *four* element
//and then do the same thing as in case 2

default:
//...

}

i.e. I want to go to case 2 both after I treat the case 4 and case 6.
Truth to tell, I doubt I'd use switch at all for this. Rather, I'd do
something like this:

if (x == 2 || x == 4 || x == 6) {
v.erase(v.begin()+2, v.begin()+x-2);
// do something
}
else
// whatever was in your default.

Of course, you'll probably need to make minor changes to account for the
position in the vector where you want to do the deletion.

--
Later,
Jerry.

The universe is a figment of its own imagination.
Mar 19 '08 #11

P: n/a
On Mar 19, 2:46 am, xz <zhang.xi...@gmail.comwrote:
What if I want the following:

vector<intv;

// v is loaded by push_back()

switch( v.size() ) {
case 2:
//do something

case 4:
//somehow delete two element
//and then do the same thing as in case 2

case 6:
//somehow delete two element
//and then do the same thing as in case 4

default:
//...

}

I thought using "continue" to implement this but got this:

continue statement not within a loop
Hi Zhang,

It seems you wanna to something like spaghetti code can do. Are you
originally from Basic language? =) I think Junchen's approach is a
right way to do it.

Cheers,
Alex
Mar 19 '08 #12

P: n/a
On Mar 19, 9:32 am, Paul Brettschneider <paul.brettschnei...@yahoo.fr>
wrote:
xz wrote:
What if I want the following:
vector<intv;
// v is loaded by push_back()
switch( v.size() ) {
case 2:
//do something
case 4:
//somehow delete two element
//and then do the same thing as in case 2
case 6:
//somehow delete two element
//and then do the same thing as in case 4
default:
//...
}
I thought using "continue" to implement this but got this:
continue statement not within a loop

Of course there is a continue for switch (for your example else-thread):

#include <iostream>

void f(uint8_t n)
{
std::cout << n << '\n';
switch(n) {
for(;;) {
case 2:
std::cout << "do_something\n";
break;
case 4:
std::cout << "somehow delete 2 elements\n";
continue;
case 6:
std::cout << "somehow delete 4 elements\n";
continue;
default:
std::cout << "default\n";
break;
}
}

}

int main()
{
f(2);
f(4);
f(6);
f(1);

}

HTH,
Paul
I didn't know that ;)

Cheers,
Mar 19 '08 #13

P: n/a
On Mar 18, 6:42 pm, Paul Brettschneider <paul.brettschnei...@yahoo.fr>
wrote:
Paul Brettschneider wrote:
Here is the correct solution (I think):
Yes; it works. Although I think using "goto" would have actually been
clearer here... at least with goto you know that it's going to jump
somewhere and you have to look for a label; whereas with your solution
I found that I first consulted the standard to verify that "continue"
was not for "switch" before looking very closely to see the "for (;;)"
hidden in there.
Jason

>
#include <iostream>

void f(int n)
{
std::cout << n << '\n';
for(;;) {
switch(n) {
case 2:
std::cout << "do_something\n";
break;
case 4:
std::cout << "somehow delete 2 elements\n";
n -= 2;
continue;
case 6:
std::cout << "somehow delete 4 elements\n";
n -= 4;
continue;
default:
std::cout << "default\n";
break;
}
break;
}

}

int main()
{
f(2);
f(4);
f(6);
f(1);

}
Mar 19 '08 #14

This discussion thread is closed

Replies have been disabled for this discussion.