2013-10-11 20 views
1

我試圖使用電子工作時的微積分自動化。不幸的是,好像我的代碼不工作,因爲所有的結果都是0.000000(見下文)。函數沒有給出有效的輸出(Visual Studio 2010上的C)

這是我已經試過: - 雙變量或INT - 刪除了微積分部分,並嘗試從輸入 得到輸出 - scanf_s和scan_f。

這些都沒有工作。奇怪的是printf在最後甚至無法打印base_v(例如)。

下面的代碼本身:

#include "stdafx.h" 
#include "stdio.h" 
#include "stdlib.h" 
#include "math.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    // variable declaration 
    double base_r, mod_r, base_v, mod_v=0; 
    double coeff=1; 
    int asdf=1; 

    // welcome message 
    printf("vMod calculator\n"); 
    printf("Please enter resistances in Ohms and voltages in Volts\n"); 

    // retrieve info about vmod 
    printf("Enter base resistance\n"); 
    scanf_s("%f", &base_r); 
    printf("Enter modified resistance\n"); 
    scanf_s("%f", &mod_r); 
    printf("Enter base voltage\n"); 
    scanf_s("%f", &base_v); 

    // calculus of modified voltage 
    coeff=asdf*((1/base_r)+(1/mod_r)); 
    mod_v=base_v*base_r*coeff; 


    // results 
    printf("Base voltage: %f \n", &base_v); 
    printf("Base resistance: %f \n", &base_r); 
    printf("Modified voltage: %f \n", &mod_v); 
    printf("Modified resistance: %f \n", &mod_r); 

    system("pause"); 

    return 0; 

} 

如果你不懂微積分,請參考下面的圖片:http://pbrd.co/1g6KWLp

感謝

回答

4

你傳入的地址printf參數&base_v而不是其值base_v。總之,擺脫了&

printf("Base voltage: %f \n", base_v); 
printf("Base resistance: %f \n", base_r); 
printf("Modified voltage: %f \n", mod_v); 
printf("Modified resistance: %f \n", mod_r); 
+0

我試過沒有'&',現在我得到了四個「-92559604647977569000000000000000000000000000000000000000000000.000000」。 – Dreadlockyx

+0

我對windows'scanf_s'不太熟悉,但我知道'scanf'希望'%lf'作爲double的說明符。也許你可以在你的'scanf_s'調用中使用浮點數或使用'%lf'來試試這個。 – Pankrates

+0

就是這樣。謝謝 ! – Dreadlockyx

3

嘛用,您在打印指針作爲浮點數來啓動,所以具有未定義行爲

1

printf直接將變量,而不是它的地址:

printf("Base voltage: %f \n", base_v); 
printf("Base resistance: %f \n", base_r); 
printf("Modified voltage: %f \n", mod_v); 
printf("Modified resistance: %f \n", mod_r); 
0

scanf函數離開換行符0×13,並在第一次通話後標準輸入緩衝區0x10的,所以下次調用得到13/10第一,爲DOS/Windows的使用 fgets然後fscanf或類似 while((dumchar = getch())== \ n); 在每次scanf()調用前清除換行符