C语言初学者的问题,里面有什么错了..

是一道关于路程和折扣的题目

#include<stdio.h>
int main()
{
float p,w,s,x;
printf("输入运费,重量,距离\n");
scanf("%f,%f,%f",&p,&w,&s);
if (s<250) ;
x=p*w*s;
printf ("%d\f",x );
else if (s<500) // 10行
x=p*w*s*(1-2/100);
printf("%d\n",x);
else if (s<1000) // 13行
x=p*w*s*(1-5/100);
printf("%d\n",x);
else if (s<2000)
x=p*w*s*(1-8/100);
printf("%d\n",x);
else if (s<3000)
x=p*w*s*(1-10/100);
printf("%d\n",x);
else
x=p*w*s*(1-15/100);
printf("%d\n",x);
return 0;
}
--------------------配置: mingw2.95 - CUI Debug, 编译器类型: MinGW (Old)--------------------

检查文件依赖性...
正在编译 C:\Users\boss\Desktop\1名1.cpp...
[Error] C:\Users\boss\Desktop\1名1.cpp:10: parse error before `else'
[Error] C:\Users\boss\Desktop\1名1.cpp:13: parse error before `else'
[Error] C:\Users\boss\Desktop\1名1.cpp:16: parse error before `else'
[Error] C:\Users\boss\Desktop\1名1.cpp:19: parse error before `else'
[Error] C:\Users\boss\Desktop\1名1.cpp:22: parse error before `else'

构建中止 1名1: 5 个错误, 0 个警告
小于250 没折扣
250-500 2%
500-1000 5%
1000-2000 8%
2000-3000 10%
大于3000 15%
总运费=单价x重量x距离x折扣

急!! 上面的\f是笔误,,无视把,不是这个问题

咳咳...这个错误...
如果if后面需要跟上多于一条的语句的时候,需要用上大括号{}
所以应当是
if ()
{……}
else if ()
{……}
这样的格式才对。

当你不加大括号的时候,if仅仅针对紧接着的下一条语句而已,而之后再出现else程序就无法识别了。追问

嗯.改好了 但是结果不对.比如带 100,20,300进去.答案应该是588000,但是我算出来是没打折扣是600000

追答

嗯 这是因为你用2/100得到的还是整型数int,这样子程序只会保留其整数部分,也就是0。所以就没打折了!
你需要将2转换为double或者float型,就是在2/100之前加上(float)或者(double)。变为(float)2/100或者(double)2/100。
每个if里面的运算都要这样才能保留小数的。

追问

谢了~~~.OK了.以后有问题还能求助你么

追答

可以的~欢迎来问 共同进步~

追问

谢了~ 2/100得到的还是整型数int 是和这个int main()指令有关么. 可以改成float main()么

追答

这个跟这个无关的...
int main()是代表你这个函数如果有返回值,那么返回值的类型是int型的。
这里2/100之所以是用整型来保存,是因为2默认是int型的数,100也默认是int型的数,自然结果也是int型。
如果你是用2.0/100那么由于2.0是double型的数,系统会自动转换为double型的结果也就是0.02。

追问

厉害.懂了,++扣扣把

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-26
if语句语法错,第二个printf语句中\n写成了\f,后面的printf中地\f写成\d了。改如下:
void main(void){
float p,w,s,x;
printf("输入运费,重量,距离\n");
scanf("%f,%f,%f",&p,&w,&s);
if (s<250){
x=p*w*s;
printf("%f\n",x );
}
else if (s<500){ // 10行
x=p*w*s*(1-2/100);
printf("%f\n",x);
}
else if (s<1000){ // 13行
x=p*w*s*(1-5/100);
printf("%f\n",x);
}
else if (s<2000){
x=p*w*s*(1-8/100);
printf("%f\n",x);
}
else if (s<3000){
x=p*w*s*(1-10/100);
printf("%f\n",x);
}
else{
x=p*w*s*(1-15/100);
printf("%f\n",x);
}
}追问

100,20,300进去.答案应该是588000,但是我算出来是没打折扣是600000

第2个回答  2013-08-26
#include<stdio.h>
int main()
{
float p,w,s,x;
printf("输入运费,重量,距离\n");
scanf("%f,%f,%f",&p,&w,&s);
if (s<250)
{x=p*w*s;
printf ("%f\n",x );}
else if (s<500) // 10行
{x=p*w*s*(1-2/100);
printf("%f\n",x);}
else if (s<1000) // 13行
{x=p*w*s*(1-5/100);
printf("%f\n",x);}
else if (s<2000)
{ x=p*w*s*(1-8/100);
printf("%f\n",x);}
else if (s<3000)
{ x=p*w*s*(1-10/100);
printf("%f\n",x);}
else
{ x=p*w*s*(1-15/100);
printf("%f\n",x);}
return 0;
}
第3个回答  2013-08-26

自己对比一下吧!

追问

下载了..算出来答案是0 ,看下我错在哪里..就比如s=300 p(price)=200 W(重量)=50 x=300*200*50*概率2%

第4个回答  2013-08-26
你的if 和 else if后面不许要加 ";"。试一下把这些分号给去了看看是否解决了问题
相似回答