2017-08-30 62 views
0

我通過一本指導書學習c,我很享受它。 但是,有一個問題,我卡住了。錯誤的計算? C編程初學者

的問題是:

「寫程序,寫號碼時‘x’和數字‘Y’,程序將顯示x的多少%是如何在年。」

「答案應爲64%,當x = 54和y = 84」

顯然,84分之54= 0.64 ... * 100,它是約64%。 但是,當我運行我的程序時,它顯示84.689699。 我沒有測試「* 100」但沒有測試。它顯示0.84689699 ...

是我的程序錯了,還是它是編譯器或什麼的問題? 我是初學者,如果有人告訴我什麼是錯的,這將是非常有幫助的。

PS:我用atom.io和gcc編譯器

#include <stdio.h> 

int main(void) 
{ 
    double vx; 
    double vy; 

    printf("Enter the 1st number : "); scanf("%f" , &vx); 
    printf("Enter the 2nd number : "); scanf("%f" , &vy); 

    printf("\a\n\nx is %f of y" , vx/vy * 100); 
    return 0; 
} 
+0

我也試圖與100.0,而不是100,但沒有... – Pingu

+6

閱讀警告:http://coliru.stacked-crooked.com/a/2f51b696c1f63219 – tkausl

+2

%lf(小寫L)不是%f – pmaxim98

回答

1

儘管scanf是一個可變參數函數,輸入不能被提升。 scanf需要一個指針作爲輸入,因此你需要指定它會%lf。如果輸入是一個變量,而不是一個指針,則C會將浮點數提升一倍。在你的程序scanf函數中有%f而不是%lf。下面的代碼工作正常,MinGW上的輸出是64.285714

此外,參考以下鏈接Correct format specifier for double in printf

int main(void) 
{ 
    double vx; 
    double vy; 

    printf("Enter the 1st number : "); scanf("%lf" , &vx); 
    printf("Enter the 2nd number : "); scanf("%lf" , &vy); 

    printf("\a\n\nx is %f of y" , vx/vy * 100); 
    return 0; 
} 
+0

謝謝你,我不知道%LF, – Pingu

+0

的存在,但存在就是爲什麼你需要'%lf'爲'scanf的理由'。 'printf'不需要它。閱讀我的答案。 – MCG

+0

哦,有一個頁面,他們解釋%lf,但在問題後5頁....謝謝。 – Pingu

0

你在你的scanf函數犯了一個錯誤。

%f在scanf函數中意味着您的輸入將被放入浮點型變量中。

改爲使用%lf。

#include <stdio.h> 

int main(void) 
{ 
    double vx; 
    double vy; 

    printf("Enter the 1st number : "); scanf("%lf" , &vx); 
    printf("Enter the 2nd number : "); scanf("%lf" , &vy); 

    printf("\a\n\nx is %f of y" , vx/vy * 100); 
    return 0; 
} 
+0

謝謝,這解決了我的問題。我不知道他們爲什麼沒有提到關於%f的指導書中的%f。 – Pingu

+0

@Pingu得到一本新書。 –

+0

@Pingu或者你可以谷歌它。 –