我正在尝试编写一个程序,找出支付工人薪水所需的钞票数量。在每个工人之后,它应该显示工人得到多少钞票,以及哪些钞票。当没有任何工人离开时,它应该显示所有工人的钞票数量。到目前为止一切都很好。
但事情就是这样:每当一名工人获得20 TL(土耳其里拉)时,它就会将该账单计为50 TL。但是在程序和程序中,当编写多少钞票时,程序会将20张钞票计为20张钞票而不是50张。您将了解我在图像中的含义。这7个数字代表200,100,50,20,10,5和1个TL账单。所有其他钞票柜台工作正常。但程序认为20 TL是50TL。即使程序在最后显示正确的数字。
正如你所看到的那样,第4名工作人员得到了20TL,但是在下一行说#34;给他一张50TL钞票"就像第9名工人一样。其他工人'纸币和纸币总数是正确的,尽管它显示20TL纸币为50TL
#include <stdio.h>
#include <stdlib.h>
void banknot(int, int *, int *, int *, int *, int *, int *, int *);
int ikiyuztl_top=0,yuztl_top=0,ellitl_top=0,yirmitl_top=0,ontl_top=0,bestl_top=0;
int birtl_top=0;
int main()
{
int i, personel, tam;
double maas;
int ikiyuztl=0,yuztl=0,ellitl=0,yirmitl=0,ontl=0,bestl=0;
int birtl=0;
int *ikiyuztl_ptr, *yuztl_ptr, *ellitl_ptr, *yirmitl_ptr, *ontl_ptr, *bestl_ptr;
int *birtl_ptr;
ikiyuztl_ptr=&ikiyuztl;
yuztl_ptr=&yuztl;
ellitl_ptr=&ellitl;
yirmitl_ptr=&ellitl;
ontl_ptr=&ontl;
bestl_ptr=&bestl;
birtl_ptr=&birtl;
printf("Personel sayisini giriniz:\n"); /* It means "How many workers are there?" */
scanf("%d",&personel);
for (i=1; i<=personel; i++) {
printf("%d. personelin maasini TL cinsinden giriniz\n",i); /*Write salary*/
scanf("%lf",&maas);
tam=maas;
banknot(tam,ikiyuztl_ptr,yuztl_ptr,ellitl_ptr,yirmitl_ptr,ontl_ptr,bestl_ptr,birtl_ptr);
printf("%d %d %d %d %d %d %d\n",ikiyuztl,yuztl,ellitl,yirmitl,ontl,bestl,birtl);
}
printf("%d %d %d %d %d %d %d\n",ikiyuztl_top,yuztl_top,ellitl_top,yirmitl_top,ontl_top,bestl_top,birtl_top);
return 0;
}
void banknot(int tam, int *ikiyuztl, int *yuztl, int *ellitl, int *yirmitl, int *ontl, int *bestl, int *birtl)
{
*ikiyuztl=0;
*yuztl=0;
*ellitl=0;
*yirmitl=0;
*ontl=0;
*bestl=0;
*birtl=0;
while (tam>=200) {
*ikiyuztl = *ikiyuztl + 1;
ikiyuztl_top++;
tam=tam-200;
}
while (tam>=100) {
*yuztl = *yuztl + 1;
yuztl_top++;
tam=tam-100;
}
while (tam>=50) {
*ellitl = *ellitl + 1;
ellitl_top++;
tam=tam-50;
}
while (tam>=20) {
*yirmitl = *yirmitl + 1;
yirmitl_top++;
tam=tam-20;
}
while (tam>=10) {
*ontl = *ontl + 1;
ontl_top++;
tam=tam-10;
}
while (tam>=5) {
*bestl = *bestl + 1;
bestl_top++;
tam=tam-5;
}
*birtl = tam;
birtl_top = birtl_top+tam;
}
答案 0 :(得分:1)
你制作了副本&amp;在这一行粘贴错误:
yirmitl_ptr=&ellitl;
因此,banknot
函数更新了错误的计数器变量(ellitl
而不是yirmitl
)。
应该是:
yirmitl_ptr=&yirmitl;
补充说明:
您不需要所有这些*_ptr
个变量。只需在banknot
电话:
banknot(tam,&ikiyuztl,&yuztl,&ellitl,&yirmitl,&ontl,&bestl,&birtl);
答案 1 :(得分:1)
错误在第20行:
...
yirmitl_ptr=&ellitl; // Should be yirmitl_ptr=&yirmitl;
...
请注意,如果您只是省略这些_ptr
变量并且只是像这样调用banknot函数,那么您可以节省大量的输入:
banknot(tam, &ikiyuztl, &yuztl, ...)