2013-07-12 114 views
2

我正在編寫一個類(C語言)的程序,它將成爲APP商店的菜單。在程序中的某個時刻,用戶將沒有足夠的錢從菜單上購買任何東西,因此他需要向他的賬戶添加資金,這是我在下面對該部分的函數定義。當我運行我的程序時,它編譯並且一切正常,直到它到達下面的switch語句,然後程序崩潰但沒有運行時錯誤,它說「它已停止工作」。這從來沒有發生過,我附上了錯誤信息的截圖。請幫忙,謝謝。程序在開關語句C語言中停止工作

void moneyChoice(double *depositPtr, double appCost) 
{ 
int choice = 0; 
printf("\n\nPlease credit your money by selection:\ 
      \n1 -- $15.00\ 
      \n2 -- $10.00\ 
      \n3 -- $5.00\ 
      \n4 -- $2.00\ 
      \n5 -- $1.00"); 
    printf("\nDeposit amount: "); 
    scanf("%d", choice); 

    switch (choice) 
    { 
    case 1: 
     *depositPtr += 15.00; 
     break; 
    case 2: 
     *depositPtr += 10.00; 
     break; 
    case 3: 
     *depositPtr += 5.00; 
     break; 
    case 4: 
     *depositPtr += 2.00; 
     break; 
    case 5: 
     *depositPtr += 1.00; 
     break; 
    } 

screenshot of program crashing}

+0

您是否嘗試過實際調試程序? –

+1

scanf(「%d」,choice); - >沒有地址? wassnt它和選擇?它的寫作地址爲零,可能是編譯器的第一個區域或類似OS使用的東西。 –

+0

該變量是double deposit = 0;在這個函數中,我需要使用教授的指針,這就是爲什麼我使用* depositPtr作爲參數的原因。該網站不讓我張貼圖片,因爲它說我需要十分的信譽得分.... – user2487982

回答

1

請使用有效的地址scanf函數,如&選擇。

scanf("%d", &choice); 

這使用選擇地址寫入掃描值。當你寫入scanf(「%d」,選擇);它只是獲得零(選擇的初始值)作爲地址,並導致未定義的行爲。

Scanf需要一個地址,因爲它正在改變函數內部的值。地址顯示需要更改的地方(選擇值的地址)。與更改depositPtr的指向數據類似。

+0

謝謝!!!!!! – user2487982