求帮忙啊解决思路
求帮忙啊!!
#include"stdio.h"
#define shui1 0.15
#define shui2 0.28
#define d1 17850
#define d2 23900
#define d3 29750
#define d4 14875
#define are "***********************"
int main(void)
{
printf("\n%s%s\n", are, are);
printf("1.danshen 2.huzhu \n");
printf("3.yihun gongyou 4.yihun liyi\n");
printf("input p end");
printf("\n%s%s\n", are, are);
printf("please choose you leixing \n");
int i=0, t = 0, shouru = 0;
double shuijin;
scanf("%d", t);
while ( 1)
{
printf("please input your shouru\n");
scanf("%lf\n", shouru);
switch (t)
{
case 1: if (shouru > d1)
shuijin = d1*shui1 + (shouru - d1)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
case 2:if (shouru > d2)
shuijin = d2*shui1 + (shouru - d2)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
case 3:if (shouru > d3)
shuijin = d3*shui1 + (shouru - d3)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
case 4:if (shouru > d4)
shuijin = d4*shui1 + (shouru - d4)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
default:printf("please choose you leixing \n");
}
printf("please choose you leixing\n");
scanf("%d", t);
}
return 0;
}
我在visual studio 2013中调试,结果告诉我]
------解决思路----------------------

C语言的类型不安全不适合新手啊.
------解决思路----------------------
scanf("%d", t); 改成 scanf("%d", &t);
其他scanf的地方同理改
------解决思路----------------------
楼主调用scanf("%d", t);的目的是让scanf函数把用户输入的值放到变量 t 里。
可是,要想让一个函数把信息通过参数反馈回来,这个参数就需要是某变量的地址。
楼主的这种写法,scanf()会把t的值(0,也就是0x00000000)当做变量的地址,用户输入数据后,
scanf就会试图在0x00000000起始的地址写入数据,引起异常。
另外,楼主网上查询下pass by value和pass by reference这两个概念的区别会对处理类似问题有帮助的。
------解决思路----------------------
我觉得应该这样才好
#include<stdio.h>
int main(void)
{
double a=0,i=14875,j=17850,k=23900,l=29750,sum=0;
double m=0.15,n=0.28;
printf("您的收入:\n");
scanf("%lf",&a);
if(j>a>i)
sum=i*m+(a-i)*n;
else if(k>a>j)
sum=j*i+(a-j)*n;
else if(l>a>k)
sum=k*m+(a-k)*n;
else if(a>l)
sum=l*m+(a-l)*n;
else
sum=a*m;
printf("税金:%.2lf\n",sum);
return 0;
}
------解决思路----------------------
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
#include"stdio.h"
#define shui1 0.15
#define shui2 0.28
#define d1 17850
#define d2 23900
#define d3 29750
#define d4 14875
#define are "***********************"
int main(void)
{
printf("\n%s%s\n", are, are);
printf("1.danshen 2.huzhu \n");
printf("3.yihun gongyou 4.yihun liyi\n");
printf("input p end");
printf("\n%s%s\n", are, are);
printf("please choose you leixing \n");
int i=0, t = 0, shouru = 0;
double shuijin;
scanf("%d", t);
while ( 1)
{
printf("please input your shouru\n");
scanf("%lf\n", shouru);
switch (t)
{
case 1: if (shouru > d1)
shuijin = d1*shui1 + (shouru - d1)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
case 2:if (shouru > d2)
shuijin = d2*shui1 + (shouru - d2)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
case 3:if (shouru > d3)
shuijin = d3*shui1 + (shouru - d3)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
case 4:if (shouru > d4)
shuijin = d4*shui1 + (shouru - d4)*shui2;
else
shuijin = shouru*shui1;
printf("your shuijin is %lf", shuijin);
break;
default:printf("please choose you leixing \n");
}
printf("please choose you leixing\n");
scanf("%d", t);
}
return 0;
}
我在visual studio 2013中调试,结果告诉我]
------解决思路----------------------
C语言的类型不安全不适合新手啊.
------解决思路----------------------
scanf("%d", t); 改成 scanf("%d", &t);
其他scanf的地方同理改
------解决思路----------------------
楼主调用scanf("%d", t);的目的是让scanf函数把用户输入的值放到变量 t 里。
可是,要想让一个函数把信息通过参数反馈回来,这个参数就需要是某变量的地址。
楼主的这种写法,scanf()会把t的值(0,也就是0x00000000)当做变量的地址,用户输入数据后,
scanf就会试图在0x00000000起始的地址写入数据,引起异常。
另外,楼主网上查询下pass by value和pass by reference这两个概念的区别会对处理类似问题有帮助的。
------解决思路----------------------
我觉得应该这样才好
#include<stdio.h>
int main(void)
{
double a=0,i=14875,j=17850,k=23900,l=29750,sum=0;
double m=0.15,n=0.28;
printf("您的收入:\n");
scanf("%lf",&a);
if(j>a>i)
sum=i*m+(a-i)*n;
else if(k>a>j)
sum=j*i+(a-j)*n;
else if(l>a>k)
sum=k*m+(a-k)*n;
else if(a>l)
sum=l*m+(a-l)*n;
else
sum=a*m;
printf("税金:%.2lf\n",sum);
return 0;
}
------解决思路----------------------
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。