C语言里的Switch语句不能正确运行
公司项目里有一C语言的程序可以编译通过,但运行时有一switch语句却不能正确运行下去。例如:
int i;
for(int i = 0;i < 100; i++)
{
switch(i)
case 0:
do something;
break;
case 1:
do something;
break;
case 2:
do something;
break;
default:
break;
}
程序运行到switch的时候~以下的case都不运行了。
开发环境是red hat linux 7.2, gcc好像是2.0
问题点数:100、回复次数:23Top
1 楼bgip(AsLinC++)回复于 2005-08-03 11:46:46 得分 0
gcc是2.96-98版本Top
2 楼newbiestar()回复于 2005-08-03 11:48:09 得分 5
switch(i)
{
case 0:
...
default:
}Top
3 楼newbiestar()回复于 2005-08-03 11:50:01 得分 40
你用gcc -S参数看看到底有没有产生正确的代码……Top
4 楼LoveYouJustOneDay(哈哈)回复于 2005-08-03 11:51:34 得分 5
switch(i) { //
case 0:
do something;
break;
case 1:
do something;
break;
case 2:
do something;
break;
default:
break;
} //Top
5 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-03 11:51:34 得分 20
for(int i = 0;i < 100; i++)
C 语言不支持这样定义 i
要么在程序开始的地方定义 i
要么在复合语句的开始的位置定义 i
(就是大括号以内的 第一个语句 定义)
不能在 其他的地方定义 任何变量Top
6 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-03 11:52:19 得分 0
for(int i = 0;i < 100; i++)
C 语言不支持这样定义 i
要么在程序开始的地方定义 i
要么在复合语句的开始的位置定义 i
(就是大括号以内的 第一个语句 定义)
不能在 其他的地方定义 任何变量Top
7 楼wh_xiexing(谢兴)回复于 2005-08-03 11:52:19 得分 5
switch(i)
{
case 0:
...
default:
}
少了括号.Top
8 楼wh_xiexing(谢兴)回复于 2005-08-03 11:52:41 得分 5
switch(i)
{
case 0:
...
default:
}
少了括号.Top
9 楼bgip(AsLinC++)回复于 2005-08-03 11:52:44 得分 0
to newbiestar()不好意思~心急~{}漏打了Top
10 楼bgip(AsLinC++)回复于 2005-08-03 11:53:33 得分 0
括号是我漏打了~不关括号的事~~Top
11 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-03 11:54:28 得分 0
象你的程序
int i;
for(int i = 0;i < 100; i++)
在 for 中就不要 int i 了
for(i = 0;i < 100; i++) 应该是可以的了 ..
Top
12 楼bgip(AsLinC++)回复于 2005-08-03 11:55:21 得分 0
to jixingzhong(瞌睡虫):
我知道~只是举个例子而已~而且我已经说过能正确编译通过,是运行时的问题~~Top
13 楼liuhaimiao()回复于 2005-08-03 11:57:19 得分 5
for(i = 0;i < 100; i++)Top
14 楼bgip(AsLinC++)回复于 2005-08-03 11:58:31 得分 0
int i;
for(i = 0;i < 100; i++)
{
switch(i)
case 0:
do something;
break;
case 1:
do something;
break;
case 2:
do something;
break;
default:
break;
}
然后是到switch的时候就不运行了~Top
15 楼windking21(想玩玩WOW 真的那么难吗)回复于 2005-08-03 11:59:23 得分 5
void main()
{
int a;
for(int i=0;i<100;i++)
{
switch(i)
{
case 0:
a=0;
break;
case 1:
a=1;
break;
case 2:
a=2;
break;
default:
break;
}
}
}
为了调式加了a的赋值语句Top
16 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-03 12:00:17 得分 5
那只能是程序中的 do something;
部分有问题了
可以测试一下
for(i = 0;i < 100; i++)
{
switch(i)
{case 0:
printf ("%d\n",i);
break;
case 1:
printf ("%d\n",i);
break;
case 2:
printf ("%d\n",i);
break;
default:
break;
}
}
程序的输出是正常的 ...
Top
17 楼newbiestar()回复于 2005-08-03 12:01:09 得分 0
回复人: jixingzhong(瞌睡虫) ( ) 信誉:100 2005-08-03 11:52:00 得分: 0
for(int i = 0;i < 100; i++)
C 语言不支持这样定义 i
要么在程序开始的地方定义 i
要么在复合语句的开始的位置定义 i
(就是大括号以内的 第一个语句 定义)
不能在 其他的地方定义 任何变量
=========================================
现行标准完全支持这样的风格的代码……Top
18 楼windking21(想玩玩WOW 真的那么难吗)回复于 2005-08-03 12:02:22 得分 0
楼主 照我那个试试看
我调式没问题Top
19 楼bgip(AsLinC++)回复于 2005-08-03 12:04:15 得分 0
to jixingzhong(瞌睡虫):
嗯~我也这样做了~就是连输出信息也没有~给气死了~
to newbiestar() :
我用了gcc -s,但好像没做什么~只是编译了一下……Top
20 楼bingbox_1984(苦丁茶)(我只喜欢CC)回复于 2005-08-03 12:09:11 得分 0
同意jixingzhong(瞌睡虫)Top
21 楼newbiestar()回复于 2005-08-03 12:19:38 得分 0
gcc -S,要大写S……
产生一个.s的文件,你对着这个文件查找你的switch的代码……Top
22 楼Flood1984(峰子)回复于 2005-08-03 12:42:13 得分 5
do something;
//这个do something;到底做了些什么?
你说程序不能运行了,
是怎么个不能运行法?有什么提示?
说清楚一点,
光你贴的这一点是找不出问题的.Top
23 楼bgip(AsLinC++)回复于 2005-08-03 16:16:31 得分 0
to newbiestar()
哦~原来这样用!
谢谢各位了~在调试过程中~发现在等于1的时候不会运行,其他数值可以顺利通过,不知为什么,于是把那个case 0x01:重新写过,就正常了。汗!
在此谢谢各位啦~结贴!Top




