C语言一段简单代码的问题(新手求解)

#include<stdio.h>

int main()
{
int iSignal; /*定义变量表示信号灯的状态*/
printf("the Red Light is 0,the Green Light is 1\n"); /*输出提示信息*/
scanf("%d",&iSignal); /*输入iSignal变量*/

if(iSignal==1) /*使用if语句进行判断*/
{
printf("the Light is green,cars can run\n"); /*判断结果为真时输出*/
}
if(iSignal==0) /*使用if语句进行判断*/
{
printf("the Light is red,cars can't run\n"); /*判断结果为真时输出*/
}
return 0;
}

上面这段程序运行的时候输入1能显示the Light is green,cars can run。但是输入0的时候却没显示the Light is red,cars can't run。这是为什么呢?还有一个问题,0是假值其他数是真值,那么输入2,3,4....等等怎么不是显示the Light is green,cars can run 的呢? 帮帮忙呀大家
书上是先教if 然后if else 然后else if 的,我看这段程序的时候还没看后面的if else 和else if。 四楼说因为在winXP或vista或win7上面是不会暂停程序,那为什么输入1执行绿灯的语句就不会一闪而过的?

你在return 0;前面加上两个getchar();或者在return 0;前面加上system("pause");就OK了……因为在winXP或vista或win7上面是不会暂停程序的……,也就是说虽然输入0显示了the Light is red,cars can't run,但是会一闪而过,因为程序已经结束了。
0是假值是指表达式是否正确,即如果iSignal的值为1,则iSignal==1为真,也就是(iSignal==1)不为0,如果iSignal的值不是1,而是0,-1,2,3,4等等,那么iSignal==1为假,就是整(iSignal==1)的值为0.要注意区分变量iSignal的值和表达式iSignal==1的值区别。
另外,如果要做选择,更好的方法是用switch语句。把下面这段语句替换两个if语句
switch(iSignal)
{
case 1 : printf("the Light is green,cars can run\n");
break;
case 0: printf("the Light is red,cars can't run\n");
break;
default: printf("Invalid input!");//若输入非0或1的数值,提示输入错误
}

补充:不知你的编译器是什么?我用的是dev-cpp,无论输入0还是1都是一闪而过的。如果是VC6或者VS2008/2010,code::blocks等编译器应该是会暂停的(这个根据编译器而定,有的编译器在程序结束时会暂停)。如果你双击可执行文件(.exe后辍的文件)而不是用编译器运行的话,无论是输入1还是0都会一闪而过的。
PS:以后写程序,不管编译器是什么,为了使用者阅读方便,还是加上#include<stdlib.h>的头文件和在程序末尾加上system("pause");
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-16
我也是新手,我想说,你咋不把第二个if换成else这样管他是什么,只要不是1他就显示the Light is red,cars can't run
第2个回答  2011-02-16
把isignal类型设为布尔类型(bool)
第3个回答  2011-02-16
首先你的程序貌似并没有错,具体怎么回事也不清楚
不过要是你需要后面的功能
需要改成:
#include<stdio.h>

int main()
{
int iSignal=0; /*定义变量表示信号灯的状态*/
printf("the Red Light is 0,the Green Light is 1\n"); /*输出提示信息*/
scanf("%d",&iSignal); /*输入iSignal变量*/

if(iSignal==0) /*使用if语句进行判断*/
{
printf("the Light is red,cars can't run\n"); /*判断结果为真时输出*/
}else{
printf("the Light is green,cars can run\n"); /*判断结果为真时输出*/
}
return 0;
}
第4个回答  2011-02-16
这是我的回答
第5个回答  2011-02-17
4楼说的很对。你这个程序,在win-tc上,无论输入什么都是不会显示结果的,应为没有暂停,再return前加上getchar()即可。如果你将iSignal==1改成iSignal就可以随便输入什么都就真了。因为如果iSignal不等于1,则前面的表达式就是假的。希望能对你有所帮助。