0

我必须用 C 编写一个简短的程序,它获取交通灯的状态(如果它是绿色或红色)并显示我们必须做的动作(通过道路/停止)。在我看来,我们必须使用这里的if子句..所以我用C写了这个但是当我运行它时,它显示“Red..”,如果我尝试按下某些东西,它只显示“Green”..我做错了什么?这是代码:

#include<stdio.h>
int main()
{

        int red,green;
        printf(" red :");
        scanf("%d",&red);
        printf(" green :");
        scanf("%d",&green);
        if ( red ){
                printf(" Stop %d\n",red);
        }
        else{
                printf("Pass the road - %d\n",green);
        }
        return 0;
}
4

4 回答 4

4

您在 if 条件中使用了整数。在 C 中,任何在 if 语句中求值的正整数都被认为是真的。

if(some positive number)
{
// always true
}
else
{
//control never reaches here
}

一种解决方法可能是针对不同条件使用特定值。

例如,试试这个

    if ( red == 1){
            printf(" Stop %d\n",red);
    }
    else{
            printf("Pass the road - %d\n",green);
    }

现在,您的 if 条件具有特定且更好的进入条件,其中只有一个特定数字对应于给定条件。您可以继续使用 来添加打印绿色语句的条件else-if,或者让它成为默认条件。

使用 switch-case 的类似实现是:

switch(red)
{
case 1:  printf(" Stop %d\n",red);
         break;

default: printf("Pass the road - %d\n",green);
         break;
}
于 2013-04-21T12:56:13.003 回答
2

您使用 请求整数类型的输入%d

根据 C 的布尔逻辑,0 为假,!0 为真。因此,除非您输入 0 作为第一个整数,否则您将始终在第一个子句中结束。

于 2013-04-21T12:39:33.637 回答
0

您需要考虑用户将如何描述灯的当前状态。而不是问它是红色的吗?并检查他是否输入了一个非零整数,这意味着是,您可以要求用户输入颜色。然后根据他键入的内容,您会显示相应的消息。

#include<stdio.h>
#include<string.h>

int main(){
    char colorName[128];
    printf(" What color is the light: ");
    scanf("%s", colorName);

    if ( strcmp(colorName, "red") == 0 ){
         printf(" Stop!\n");
    }else  if ( strcmp(colorName, "green") == 0 ){
         printf("cross the road\n");
    }else {
         printf("is %s even a color?\n", colorName);
    }
    return 0;
}
于 2013-04-21T13:07:06.917 回答
0
#include<graphics.h>
#include<conio.h>
#include<dos.h>
#include<stdlib.h>

main()
{
   int gd = DETECT, gm, midx, midy;

   initgraph(&gd, &gm, "C:\\TC\\BGI");

   midx = getmaxx()/2;
   midy = getmaxy()/2;

   setcolor(RED);
   settextstyle(SCRIPT_FONT, HORIZ_DIR, 3);
   settextjustify(CENTER_TEXT, CENTER_TEXT);
   outtextxy(midx, midy-10, "Traffic Light Simulation");
   outtextxy(midx, midy+10, "Press any key to start");
   getch();
   cleardevice();
   setcolor(WHITE);
   settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
   rectangle(midx-30,midy-80,midx+30,midy+80);
   circle(midx, midy-50, 22);
   setfillstyle(SOLID_FILL,RED);
   floodfill(midx, midy-50,WHITE);
   setcolor(BLUE);
   outtextxy(midx,midy-50,"STOP");
   delay(2000);
   graphdefaults();
   cleardevice();
   setcolor(WHITE);
   rectangle(midx-30,midy-80,midx+30,midy+80);
   circle(midx, midy, 20);
   setfillstyle(SOLID_FILL,YELLOW);
   floodfill(midx, midy,WHITE);
   setcolor(BLUE);
   outtextxy(midx-18,midy-3,"READY");

   delay(2000);
   cleardevice();
   setcolor(WHITE);
   rectangle(midx-30,midy-80,midx+30,midy+80);
   circle(midx, midy+50, 22);
   setfillstyle(SOLID_FILL,GREEN);
   floodfill(midx, midy+50,WHITE);
   setcolor(BLUE);
   outtextxy(midx-7,midy+48,"GO");
   setcolor(RED);
   settextstyle(SCRIPT_FONT, HORIZ_DIR, 4);
   outtextxy(midx-150, midy+100, "Press any key to exit...");

   getch();
   closegraph();
   return 0;
}
于 2013-06-26T16:54:03.717 回答