473,473 Members | 1,867 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

Switch-case problem

I encountered a strange problem about switch-case statement.
switch(cmd)
{
case 1: statements; break;
case 2: statements; break;
... ....
case 11: S1;
S2;
S3;
statements;
break;
... ...
case xx
}

When the cmd is above 11, the first two statements are skipped. Take case 11
as example
the first executing statement is S3, not S1.
What the problem is?
Nov 14 '05 #1
10 3665
"Chih-Hsu Yen" <zs****@ms14.hinet.net> wrote:
I encountered a strange problem about switch-case statement.
switch(cmd)
{
case 1: statements; break;
case 2: statements; break;
... ....
case 11: S1;
S2;
S3;
statements;
break;
... ...
case xx
}

When the cmd is above 11, the first two statements are skipped. Take case 11
as example
the first executing statement is S3, not S1.
What the problem is?


I've no idea, and it would be very hard to tell without seeing your
actual code. For example, what _are_ S1, S2, and S3? How is cmd defined?
What is the case just before case 11? Show your real code, and we may be
able to help.

Richard
Nov 14 '05 #2
Most cases have analogous format as case 10, so I only pasted case 10.
It seems that the first two statements are skipped, no matter what they are,
while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in case 10,
but I can not figure out how could this happen.

-------------
scanf("%d",&cmd);

switch(cmd){
case 1: similar as case 10

case 2: similar as case 10

case 3: similar as case 10

case 10: /*insert inbound SPD*/
spd_udp.opcode = SPD_IN_INSERT;
printf("please input the addr1 & addr2 (XX XX, XX=00-3F): ");
scanf("%x %x",&addr1,&addr2);
printf("please select an action : \n");
printf("1: bypass \n");
printf("2: IPsec \n");
printf("3: disard \n");
scanf("%d",&sel);
if(sel == 1)
{
entry_spd.ctrl.action_index = 0;
entry_spd.ctrl.next_index = 0;
}
else if(sel == 2)
{
entry_spd.ctrl.action_index = 64;
entry_spd.ctrl.next_index = 0;
}
else if(sel == 3)
{
entry_spd.ctrl.action_index = 128;
entry_spd.ctrl.next_index = 0;
}
else
{
printf("error selection!! \n");
break;
}
spd_udp.oper.operand_addr1 = addr1;
spd_udp.oper.operand_addr2 = addr2;
sendstring[0] = spd_udp.opcode;
sendstring[1] = spd_udp.oper.operand_addr1;
sendstring[2] = spd_udp.oper.operand_addr2;
sendstring[3] = entry_spd.ctrl.action_index;
sendstring[4] = entry_spd.ctrl.next_index;
sendstring[5] = 0;
sendstring[6] = entry_spd.protocol;
printf("please input sip value (XX XX XX XX, XX=00-FF): ");
scanf("%x %x %x %x", &b[0], &b[1], &b[2], &b[3]);
entry_spd.sip = word_build(b[0],b[1],b[2],b[3]);
for (i=7; i<11; i++)
{
sendstring[i] = b[i-7];
}
printf("please input sip Mask value (XX XX XX XX, XX=00-FF): ");
scanf("%x %x %x %x", &b[0], &b[1], &b[2], &b[3]);
entry_spd.sipMask = word_build(b[0],b[1],b[2],b[3]);
for (i=11; i<15; i++)
{
sendstring[i] = b[i-11];
}
printf("please input dip value (XX XX XX XX, XX=00-FF): ");
scanf("%x %x %x %x", &b[0], &b[1], &b[2], &b[3]);
entry_spd.dip = word_build(b[0],b[1],b[2],b[3]);
for (i=15; i<19; i++)
{
sendstring[i] = b[i-16];
}
printf("please input dip Mask value (XX XX XX XX, XX=00-FF): ");
scanf("%x %x %x %x", &b[0], &b[1], &b[2], &b[3]);
entry_spd.dipMask = word_build(b[0],b[1],b[2],b[3]);
for (i=19; i<23; i++)
{
sendstring[i] = b[i-19];
}
printf("please input spMaxMin value (XX XX XX XX, XX=00-FF): ");
scanf("%x %x %x %x", &b[0], &b[1], &b[2], &b[3]);;
entry_spd.spMaxMin = word_build(b[0],b[1],b[2],b[3]);
for (i=23; i<27; i++)
{
sendstring[i] = b[i-23];
}
printf("please input dpMaxMin value (XX XX XX XX, XX=00-FF): ");
scanf("%x %x %x %x", &b[0], &b[1], &b[2], &b[3]);
entry_spd.dpMaxMin = word_build(b[0],b[1],b[2],b[3]);
for (i=27; i<31; i++)
{
sendstring[i] = b[i-27];
}
insert_isp(spd_udp.oper,entry_spd);
sendsocket(sendstring,SPD_INTPAC_LEN);
c=getchar();
break;
}
"Richard Bos" <rl*@hoekstra-uitgeverij.nl> ¼¶¼g©ó¶l¥ó·s»D:42***************@news.xs4all.nl...
"Chih-Hsu Yen" <zs****@ms14.hinet.net> wrote:
I encountered a strange problem about switch-case statement.
switch(cmd)
{
case 1: statements; break;
case 2: statements; break;
... ....
case 11: S1;
S2;
S3;
statements;
break;
... ...
case xx
}

When the cmd is above 11, the first two statements are skipped. Take case
11
as example
the first executing statement is S3, not S1.
What the problem is?


I've no idea, and it would be very hard to tell without seeing your
actual code. For example, what _are_ S1, S2, and S3? How is cmd defined?
What is the case just before case 11? Show your real code, and we may be
able to help.

Richard

Nov 14 '05 #3

Chih-Hsu Yen wrote:
Most cases have analogous format as case 10, so I only pasted case 10. It seems that the first two statements are skipped, no matter what they are, while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in case 10, but I can not figure out how could this happen.


Could you by any means step through your code and see what is going on?
<snip code>

--
Imanpreet Singh Arora

Nov 14 '05 #4
It's really strange. I marked all statements as comments and left "break"
statement only in case 10.
However, the first two statements of case 11 are still skipped.
But, if I remove all statements and left "break" statement in case 10.
The execution of case 11 is correct.
Do there have restrictions on the number of lines in switch-case statement,
no matter what they are statements or comments?

"Minti" <im*******@gmail.com>
???????:11*********************@z14g2000cwz.google groups.com...

Chih-Hsu Yen wrote:
Most cases have analogous format as case 10, so I only pasted case

10.
It seems that the first two statements are skipped, no matter what

they are,
while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in

case 10,
but I can not figure out how could this happen.


Could you by any means step through your code and see what is going on?
<snip code>

--
Imanpreet Singh Arora

Nov 14 '05 #5
*** top-posting corrected ***
Chih-Hsu Yen wrote:
"Minti" <im*******@gmail.com>
Chih-Hsu Yen wrote:

Most cases have analogous format as case 10, so I only pasted
case 10. It seems that the first two statements are skipped, no
matter what they are, while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes
in case 10, but I can not figure out how could this happen.


Could you by any means step through your code and see what is
going on?


It's really strange. I marked all statements as comments and left
"break" statement only in case 10. However, the first two
statements of case 11 are still skipped. But, if I remove all
statements and left "break" statement in case 10. The execution
of case 11 is correct. Do there have restrictions on the number
of lines in switch-case statement, no matter what they are
statements or comments?


You almost certainly have undefined behaviour somewhere, which
might even be writing into a jump table. Simplify your code so
that errors stand out. That usually means splitting off
subroutines to do jobs.

Please do not top-post. Your answer belongs after, or intermixed
with, the material to which you reply, with non-germane portions
snipped out. Top-posting is generally considered rude, boorish and
inconsiderate.

--
"If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson

Nov 14 '05 #6
"Chih-Hsu Yen" <zs****@ms14.hinet.net> writes:
Most cases have analogous format as case 10, so I only pasted case 10.
It seems that the first two statements are skipped, no matter what they are,
while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in case 10,
but I can not figure out how could this happen.

-------------
scanf("%d",&cmd);
now a "\n" is still in the input stream...
switch(cmd){
case 1: similar as case 10

case 2: similar as case 10

case 3: similar as case 10

case 10: /*insert inbound SPD*/
spd_udp.opcode = SPD_IN_INSERT;
printf("please input the addr1 & addr2 (XX XX, XX=00-3F): ");
scanf("%x %x",&addr1,&addr2);


this scanf is "skipped" due to the "\n" in the input stream...

.... an so on

Björn
--
Bjoern Pedersen

Nov 14 '05 #7

Bjoern Pedersen wrote:
"Chih-Hsu Yen" <zs****@ms14.hinet.net> writes:
Most cases have analogous format as case 10, so I only pasted case 10. It seems that the first two statements are skipped, no matter what they are, while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in case 10, but I can not figure out how could this happen.

-------------
scanf("%d",&cmd);


now a "\n" is still in the input stream...
switch(cmd){
case 1: similar as case 10

case 2: similar as case 10

case 3: similar as case 10

case 10: /*insert inbound SPD*/
spd_udp.opcode = SPD_IN_INSERT;
printf("please input the addr1 & addr2 (XX XX, XX=00-3F): ");
scanf("%x %x",&addr1,&addr2);


this scanf is "skipped" due to the "\n" in the input stream...


Nopes, the scanf here won't be skipped. It would be skipped only if we
were taking a character which it isn't taking.

It seems to be different problem altogether. I believe that the OP is,
just doing something else that makes him believe that the the
statements are skipped.

--
Imanpreet Singh Arora

Nov 14 '05 #8
Chih-Hsu Yen wrote:
Most cases have analogous format as case 10, so I only pasted case 10.
It seems that the first two statements are skipped, no matter what they are,
while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in case 10,
but I can not figure out how could this happen.
[...] switch(cmd){
case 1: similar as case 10

case 2: similar as case 10

case 3: similar as case 10

case 10: /*insert inbound SPD*/
spd_udp.opcode = SPD_IN_INSERT; [...] sendsocket(sendstring,SPD_INTPAC_LEN);
c=getchar();
break;
}


Did you really close your switch after case 10, or can we assume that
case 11 starts after the break and before the brace?
Nov 14 '05 #9

In article <m3************@resi2.office.frm2>, Bjoern Pedersen <Bj*************@frm2.tum.de> writes:
"Chih-Hsu Yen" <zs****@ms14.hinet.net> writes:
case 10: /*insert inbound SPD*/
spd_udp.opcode = SPD_IN_INSERT;
printf("please input the addr1 & addr2 (XX XX, XX=00-3F): ");
scanf("%x %x",&addr1,&addr2);


this scanf is "skipped" due to the "\n" in the input stream...


And the output from the printf will likely not have appeared yet,
because stdout is probably in line-buffering mode, no newline has
been written, and stdout has not been flushed.

We might have more confidence in claims about statements being
"skipped" if they were written to have visible effects, and if you
checked whether they failed. (scanf returns a value for a reason.)

C seems to attract the sort of programmer who throws code at a
problem and hopes it will all work correctly. This approach does not
always produce ideal results.

--
Michael Wojcik mi************@microfocus.com

The antics which have been drawn together in this book are huddled here
for mutual protection like sheep. If they had half a wit apiece each
would bound off in many directions, to unsimplify the target. -- Walt Kelly
Nov 14 '05 #10
"Carlos" <an***@quovadis.com.ar> ???????:d3**********@domitilla.aioe.org...
Chih-Hsu Yen wrote:
Most cases have analogous format as case 10, so I only pasted case 10.
It seems that the first two statements are skipped, no matter what they
are, while the case number is above 10.
Therefore, I thought that the problem may be caused by the codes in case
10,
but I can not figure out how could this happen.


[...]
switch(cmd){
case 1: similar as case 10

case 2: similar as case 10

case 3: similar as case 10

case 10: /*insert inbound SPD*/
spd_udp.opcode = SPD_IN_INSERT;

[...]
sendsocket(sendstring,SPD_INTPAC_LEN);
c=getchar();
break;
}


Did you really close your switch after case 10, or can we assume that case
11 starts after the break and before the brace?


I solved the problem by deleting "sendsocket(sendstring, SPD_INTPAC_LEN);"
and retyping it again.
I still can not figure out what happened, but it is fixed.
Nov 14 '05 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

14
by: Rudi Hansen | last post by:
I dont seem to be able to find the switch statement in Python. I would like to be able to do switch(var) case 1 : print "var = 1" case 2: print "var = 2"
2
by: jr | last post by:
I have a niggle with the Switch function I have a querey which has a column with 3 digit values of which there are about 20 which are unique. These are meaningless to the user and so using...
13
by: webzila | last post by:
Hello, I have to write a program for an 8051 micro-controller using micro-C to monitor Switch 1 and if the switch in pushed the message "switch 1 pushed" should be displayed in the LCD. Also the...
12
by: junky_fellow | last post by:
Which is better using a switch statement or the if-then equivalent of switch ?
65
by: He Shiming | last post by:
Hi, I just wrote a function that has over 200 "cases" wrapped in a "switch" statement. I'm wondering if there are performance issues in such implementation. Do I need to optimize it some way? ...
13
by: William Stacey | last post by:
Using the following code sample: public byte Get() { // <= Possible to switch Here?? lock(syncLock) { //Do something in Get(). } }
2
by: 7777777.chen | last post by:
Is it true that VC++ doesn't support switch on string data type? Did anyone know how to handle the following situation? (1) System::String* s_TC = treeview->Nodes->Item->Nodes->Item->Text; or...
13
by: Michael Griebe | last post by:
Simple question. I am optimizing some C++ code and I'd like to know which is faster (or if there is any difference at all) between using a switch statement or nested else-ifs. I'm partial to...
11
by: Peter Kirk | last post by:
Hi i have a string variable which can take one of a set of many values. Depending on the value I need to take different (but related) actions. So I have a big if/else-if construct - but what is...
11
by: =?Utf-8?B?anAybXNmdA==?= | last post by:
Can switch statements be nested? I've got a large routine that runs off of a switch statement. If one of the switches in switch #1 is true, that enters switch statement #2. Some of the...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
muto222
php
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.