读书人

while 失灵了吗解决方案

发布时间: 2012-04-03 12:38:19 作者: rapoo

while 失灵了吗
写了:
/****一个厘米换算成英尺和英寸的函数*******/
#include<stdio.h>
#define CM_FEET 38.48 //一英尺等于38.48厘米
#define CM_INCH 2.54 //一英寸等于2.54厘米
int main(void)
{

double cm;
double feet;
int feet_lv;
double inch;

printf("Enter a height in centimeters:");
scanf_s("%f",&cm);
feet = cm / CM_FEET;
feet_lv = (int)cm % (int)CM_FEET;
inch = feet_lv / CM_INCH;
while(cm > 0)
{
printf("%.1f cm = %d feet,%.1f inches\n",cm,(int)feet,inch);
printf("Enter a height in centimeters(<=0 to quit):");
scanf_s("%f",&cm);
}

printf("bye\n");
return 0;

}


编译没有错误
然后运行

Enter a height in centimeters:182
bye


循环输出那段不见了!
肿么回事啊,vs2008的。各位帮帮忙吧

[解决办法]
scanf_s("%f",&cm);
=>scanf_s("%lf",&cm);

cm 是double,必须用lf,
不然会放错地址。

[解决办法]
scanf_s("%f",&cm);
主要是cm是double类型,用scanf函数读入double类型要用%lf。
楼主试试下面的:

C/C++ code
/****一个厘米换算成英尺和英寸的函数*******/#include <stdio.h>#define CM_FEET 38.48 //一英尺等于38.48厘米#define CM_INCH 2.54 //一英寸等于2.54厘米int main(void){    double cm;    double feet;    int feet_lv;    double inch;    printf("Enter a height in centimeters:");    scanf_s("%lf",&cm);    feet = cm / CM_FEET;    feet_lv = (int)cm % (int)CM_FEET;    inch = feet_lv / CM_INCH;    while(cm > 0)    {        printf("%.1f cm = %d feet,%.1f inches\n",cm,(int)feet,inch);        printf("Enter a height in centimeters(<=0 to quit):");        scanf_s("%lf", &cm);    }    printf("bye\n");    return 0;}
[解决办法]
应该是while的条件问题,
看了代码你输入最好利用 %lf, 因为是double型的
[解决办法]
scanf_s("%lf",&cm);
[解决办法]
scanf("lf",&cm);
cm是double 类型。
[解决办法]
scanf_s("%f",&cm);
=>scanf_s("%lf",&cm);

[解决办法]
你两个都改了吗,第二个的scanf_s 也要修改
[解决办法]
在C编译器里面应该这样该
#include<stdio.h>
#define CM_FEET 38.48
#define CM_INCH 2.54
/*int main(void)
{

double cm;
double feet;
int feet_lv;
double inch;

printf("Enter a height in centimeters:");
scanf("%lf",&cm);
feet=cm / CM_FEET;
feet_lv = (int)cm % (int)CM_FEET;
inch = feet_lv / CM_INCH;
while(cm > 0.001)
{
printf("%.1f cm = %d feet,%.1f inches\n",cm,(int)feet,inch);
printf("Enter a height in centimeters(<=0 to quit):");
scanf("%lf",&cm);
}

printf("bye\n");
return 0;

} */
int main()
{
double feet,cm;
feet=cm/CM_FEET;
printf("%d",feet);
}
这样就行了,在C里面#define 后面的一行都是宏定义的范围,你注释掉也不行
[解决办法]
·常量也有类型。
·请检查scanf的返回值。

printf里面的%和变量的一一对应关系


scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

[解决办法]
scanf_s("%f",&cm);
=>scanf_s("%lf",&cm);

[解决办法]
不是说了吗?#define 后面的注释去掉或者换行用/* */注释,TC和visualC++不一样的

读书人网 >C语言

热点推荐