2015-12-05 48 views
0

我想寫發現許多紙幣是如何需要支付工人工資的程序。在每個工人之後,它應該顯示工人獲得多少鈔票以及哪些鈔票。當沒有工人離開時,應該顯示所有工人有多少鈔票。到現在爲止還挺好。指針,計數器就會犯糊塗

但這裏的東西:只要工人得到20 TL(土耳其里拉),計算出賬單爲50 TL。但在程序中,在編寫多少鈔票時,程序將20張鈔票計爲20張鈔票而不是50張。您將瞭解我在圖像上的含義。這7個數字代表200,100,50,20,10,5和1個TL票據。所有其他的鈔票計數器工作正常。但程序認爲20 TL是50TL。即使程序在最後顯示正確的數字。

正如你可以看到第四工人得到20TL,但表示在下一行「給他一個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

它在哪裏打印工人獲得多少工資?唯一的打印語句(輸入提示符之外)只是打印數字。 –

+0

@ScottHunter即時猜測每個工人工資是用戶輸入('的scanf(「%LF」,...)'),打印輸出列出的每一種音符(200,100,50,20的音符數?,...)。 – matz

+0

@ScottHunter 是的,我給程序,工人多少得到(2364 TL爲例),它應該對我說了多少鈔票那個工人應該得到(11 1 1 0 1 0 4 2364 TL) –

回答

1

你在這行做了一個副本&粘貼錯誤:

yirmitl_ptr=&ellitl; 

因此,banknot功能更新錯誤計數器變量(ellitl而不是yirmitl)。

它應該是:

yirmitl_ptr=&yirmitl; 

其它注意事項:

你並不需要所有這些*_ptr變量。僅僅通過參考在banknot呼叫通過計數器:

banknot(tam,&ikiyuztl,&yuztl,&ellitl,&yirmitl,&ontl,&bestl,&birtl); 
+0

謝謝它工作的人 –

+0

我知道,但我應該在這裏使用指針。這是我的作業。再次感謝。 @matz –

1

的錯誤是在第20行:

... 
yirmitl_ptr=&ellitl; // Should be yirmitl_ptr=&yirmitl; 
... 

注意,您可以爲自己省下一大堆打字的,如果你簡單地忽略這些_ptr變量只需撥打您的銀行功能,如下所示:

banknot(tam, &ikiyuztl, &yuztl, ...)