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