2010-03-22 191 views
4

我只想在這裏以正確的方向推動我的家庭作業。下面是這樣一個問題:通過引用函數調用

(1)編寫一個C函數稱爲輸入返回空隙,這 函數提示的 兩個整數後跟雙 精度值輸入該用戶。此功能從鍵盤讀取 這些值,並且 找到輸入的兩個整數 的乘積。該功能使用通過 的調用參考將三個值讀取的 和產品 的值通信計算回主程序。 然後主程序打印出 三個數值讀數和產品 的計算值。提供測試結果 輸入:3 5 23.5。請勿在程序中使用數組 或全局變量。

這裏是我的代碼:

#include <stdio.h> 
#include <stdlib.h> 

void input(int *day, int *month, double *k, double *pro); 

int main(void){ 
    int i,j; 
    double k, pro; 


    input(&i, &j, &k, &pro); 
    printf("%f\n", pro); 
    return 0; 
} 

void input(int *i, int *j, double *k, double *pro){ 

    int x,y; 
    double z; 
    double product; 

    scanf("%d", &x); 
    scanf("%d", &y); 
    scanf("%f", &z); 


    *pro += (x * y * z); 

} 

我無法弄清楚如何使用指針引用變量真的,它只是不工作對我來說。

任何幫助將是偉大的!

回答

1

input函數讀取的數字,您可以使用指針iptrjptrkptrproptr的直接讀出值轉換爲main函數聲明爲變量ijk

void input(int *iptr, int *jptr, double *kptr, double *proptr){ 

    scanf("%d", iptr); // read directly into i using pointer to i. 
    scanf("%d", jptr); 
    scanf("%f", kptr); 

    *proptr = ((*iptr) * (*jptr)); // compute product and assign to pro. 
} 
+0

是我,還是沒問題未指定我在讀取的雙值做什麼? – Chad 2010-03-22 06:01:22

+0

@Chad,只讀取它並在主要打印它。 – 2010-03-22 06:05:14

+0

@查德:那是我從問題中得到的。 – codaddict 2010-03-22 06:06:37

0

你的程序沒有做的是將輸入的值設置爲i,j和k。

而不是使用x,y和z,而是使用參數。

2

就快,但不是製造新的變量xy,並且z,使用指針,你通過:

scanf("%d", i); 
scanf("%d", j); 
scanf("%f", k); 

*pro += ((*i) * (*j) * (*k)); 
+0

爲什麼'+ ='?這個double還沒有初始化,所以你可能會得到垃圾。 – dreamlax 2010-03-22 06:38:19

+0

那是這樣的代碼。 – rlbond 2010-03-27 02:08:03

1
*pro += (x * y * z); 

這將打破可怕。您正在將產品添加到事先在專業版中發生的任何垃圾中。你想從pro回來除了刪除+,即:

*pro = (x * y * z); 
3

您加入pro但沒有初始化,你是不是傳遞值。您將值存儲到傳入變量的地址中。在這種情況下,您需要取消引用訪問/檢索值的指針*i,並且在您的方法中直接使用傳遞的地址 - 那麼您不需要再次訪問它們的地址。

This works - I double with float ...:

#include <stdio.h> 
#include <stdlib.h> 

void input(int *day, int *month, float *k, float *pro); 

int main(void){ 
    int i,j; 
    float k, pro; 

    i = j = k = pro = 0; 

    input(&i, &j, &k, &pro); 
    printf("%f\n", pro); 
    printf("%d : %d : %f\n", i,j,k); 
    return 0; 
} 

void input(int *i, int *j, float *k, float *pro){ 

    scanf("%d", i); 
    scanf("%d", j); 
    scanf("%f", k); 

    printf("%d - %d - %f\n", *i,*j,*k); 

    *pro += (*i * *j * *k); 
} 

輸出:

1 
2 
3.5 
1 - 2 - 3.500000 
7.000000 
1 : 2 : 3.500000