一个C程序的小问题,
代码如下:#include <stdio.h>
void main()
{
#define KG_PER_POUND 0.4536;
double weight,kgn;
printf("请输入磅数:");
scanf("%f",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:&f",kgn);
}
报错为:
F:\VC++ 6.0编程代码\song\chen.c(10) : error C2100: illegal indirection
恳请各位高人指点一二,不胜感谢。 printf("相对应的千数为:&f",kgn);
printf("相对应的千数为:%lf",kgn);
#define KG_PER_POUND 0.4536; 定义在头文件下面 #include <stdio.h>
#define KG_PER_POUND 0.4536
void main()
{
double weight,kgn;
printf("请输入磅数:");
scanf("%lf",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:%lf",kgn);
}
[[it] 本帖最后由 走一圈 于 2008-5-11 22:53 编辑 [/it]] [quote][bo]以下是引用 [un]走一圈[/un] 在 2008-5-11 22:41 的发言:[/bo]
#include
#define KG_PER_POUND 0.4536;
void main()
{
double weight,kgn;
printf("请输入磅数:");
scanf("%f",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:&lf",kgn);
} ... [/quote]
#define KG_PER_POUND 0.4536;->#define KG_PER_POUND 0.4536
printf("相对应的千数为:&lf",kgn);-->printf("相对应的千数为:%lf",kgn); 改成 float 也可以 KG_PER_POUND*weight在TC下这语句是错误的
#include <stdio.h>
#define KG_PER_POUND 0.4536
void main()
{
float weight,kgn;
printf("请输入磅数:");
scanf("%f",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:%f",kgn);
}
[[it] 本帖最后由 走一圈 于 2008-5-11 23:00 编辑 [/it]] 现在可以运行了,可是输出的结果是错的,还是最后那句表示有问题,,
printf("相对应的千数为:%f",kgn);
所以还是请各位再看看。 如果把一个实变量当作一个指针赋值,则产生C2100编译错误
[[it] 本帖最后由 走一圈 于 2008-5-11 23:15 编辑 [/it]] 可以运行,只是结果是错的,应该是最后一句格式 有问题, 最后一句printf("相对应的千数为:%f",kgn);没什么错误啊 没出现C2100错误了吗 不能把实变量做为指针直接
kgn=KG_PER_POUND*weight; 这样写估计不行 我在TC下是不行 的 我看VC一样 把宏定义拿下来乘估计不行
我没 VC 郁闷[tk01]
[[it] 本帖最后由 走一圈 于 2008-5-11 23:30 编辑 [/it]] #include <stdio.h>
void main()
{
float weight,kgn,KG_PER_POUND;
KG_PER_POUND=0.4536;
printf("请输入磅数:");
scanf("%f",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:%f",kgn);
}
直接这样好了 [code]
/*********************************************
改后的程序,在WIN-TC下正常运行,但结果是否
正确不知道,因为我没搜过磅转斤的公式。
*********************************************/
#include <stdio.h>
#define KG_PER_POUND 0.4536
void main()
{
double weight,kgn;
printf("请输入磅数:\n");
scanf("%lf",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:%f\n",kgn);
getch();
}
/*************************************************************
ps:刚才忘说了,你在输入的时候,因为定义类型为double型,所以输入的时候
格式应该为:%lf.
**************************************************************/
[/code]
[[it] 本帖最后由 广陵绝唱 于 2008-5-11 23:35 编辑 [/it]] getch(); 为什么最后来个这个. [quote][bo]以下是引用 [un]走一圈[/un] 在 2008-5-11 23:36 的发言:[/bo]
getch(); 为什么最后来个这个. [/quote]
如果你的操作系统是win98以上的,用win-tc的话要在最后加一getch();才可以看到输出的结果 [quote][bo]以下是引用 [un]走一圈[/un] 在 2008-5-11 22:41 的发言:[/bo]
#include
#define KG_PER_POUND 0.4536
void main()
{
double weight,kgn;
printf("请输入磅数:");
scanf("%lf",&weight);
kgn=KG_PER_POUND*weight;
printf("相对应的千数为:%lf",kgn);
} ... [/quote]
不需要改变宏定义的位置,原来的程序错误有三个:
1)#define KG_PER_POUND 0.4536;<-- 不能加分号,这会使得
kgn=KG_PER_POUND*weight; 展开为kgn=0.4536;*weight; 由于weight不是指针变量,这样的引用是错误的。
2)scanf("%f",&weight); 因为weight是double,需用%lf;用%f会造成存贮格式出错,详细的请高人指点:P
3)printf("相对应的千数为:&f",kgn); &f是取得变量f的地址,但在printf中该表达式不起作用,printf中用%f指示相应变量的类型。此外,对printf而言%f和%lf是一样的,两者都指定相应的变量类型为double。--参见C-FAQ一书。 补充:
宏定义可以从任何地方开始,不过对它的使用必须是在定义之后,不能用于定义之前,这也是为什么常量宏定义置于文件头的原因。
#define 宏定义在文件末尾结束,也可以用#undef强制其提前结束。 谢谢大家的指点,小弟在此不胜感谢,,
页:
[1]
