读书人

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

发布时间: 2013-04-20 19:43:01 作者: rapoo

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

读书人网 >C语言

热点推荐