首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

下边这个程序为什么会出现无尽循环啊

2013-04-20 
下面这个程序为什么会出现无尽循环啊?下面这个程序,提示语句运行正确,就是有个小问题想请教一下,“在我用红

下面这个程序为什么会出现无尽循环啊?
下面这个程序,提示语句运行正确,就是有个小问题想请教一下,“在我用红色标志语句中,应该是输入数字的,但如果我输入的是字母,为什么会出现无尽的循环啊?”
file 1.c

# include <stdio.h>

static int mode;//以下三个变量具有文件作用域,且是内部链接
static double distance;
static double consumption;

void set_mode (int happy)
{

mode = 1;
if (happy >1)
{
printf ("Invalid mode specified. Mode 1 (US) used.\n");
}
else 
mode = 0;

}

void get_info (void)
{
switch (mode)
{
case 0: printf ("Enter distance traveled in kilometers: ");
scanf ("%lf", &distance); 
printf ("Enter fuel consumed in liters: ");
scanf ("%lf", &consumption);
break;
case 1: printf ("Enter distance traveled in miles: ");
scanf ("%lf", &distance);
printf ("Enter fuel consumed in gallons: ");
scanf ("%lf", &consumption);
break;
}
}

void show_info (void)
{
switch (mode)
{
case 0: printf ("fuel consumption is %.2lf liters per 100 km.\n", 
    (double) consumption / distance * 100);
break;
case 1: printf ("fuel consumption is %.1f miles per gallon.\n",
(double) consumption / distance);
}
}


file 2.c
# include <stdio.h>
# include "pe12-2a.h"

int main (void)
{
int mode ;

printf ("Enter 0 for metric mode , 1 for US mode:");
scanf ("%d", &mode);
while (mode >= 0)
{
set_mode (mode);
get_info ();
show_info ();
printf ("Enter 0 for metric mode , 1 for US mode");
printf ("(-1 to quit):");
scanf ("%d", &mode);
}
printf ("Done.\n");
return 0;
}


file .h
void set_mode (int mode);

void get_info (void);

void show_info (void);



[解决办法]

int main (void)
{
    int mode ; //这个mode的值没有改变,下面的while形成死循环了
     
    printf ("Enter 0 for metric mode , 1 for US mode:");
    scanf ("%d", &mode);
    while (mode >= 0)
    {
        set_mode (mode);
        get_info ();
        show_info ();
        printf ("Enter 0 for metric mode , 1 for US mode");
        printf ("(-1 to quit):");
        scanf ("%d", &mode);


    }
    printf ("Done.\n");
    return 0;
}


[解决办法]
楼上正解,
 

  int mode ; //这个mode的值没有改变,下面的while形成死循环了
      
    printf ("Enter 0 for metric mode , 1 for US mode:");
    scanf ("%d", &mode);
    while (mode >= 0)
    {
        set_mode (mode);
        get_info ();
        show_info ();
        printf ("Enter 0 for metric mode , 1 for US mode");
        printf ("(-1 to quit):");
        scanf ("%d", &mode);  //这里输入字符时,mode没有得到输入的值,还是循环外面输入的值
    }
    printf ("Done.\n");
    return 0;

热点排行