2014-02-20 50 views
0

今天我試着製作一個計算器,將距離轉換成米,英寸等。我用Visual Studio 2013 Ultimate在C中編寫了我的小程序。C編程和計算

我的問題是,當我輸入一個數字時,程序計算錯誤!

PS。這不是家庭作業,這是來自「讓我們C」的練習,我正在閱讀ATM。

我得到以下輸出:

在兩個城市之間輸入距離的值km's10儀表= 0 英寸= -1064763392英尺= -2147483648釐米= 1103731097等待一個 字符從鍵盤按下退出。

/*Just for fun Author: Anru*/ 
#include <stdio.h> 
int main() 
{ 
    int km; 
    float result_met, result_inch, result_feet, result_cm; 

    /*Display text*/ 
    printf("Enter values of the distance between the two cities in km's"); 
    scanf_s(&km); 

     /*Formular for a simple km conversion*/ 

    result_met = km * 1000; 
    result_inch = km * 39370; 
    result_feet = km * 3280; 
    result_cm = km * 100000; 

    /*Result print*/ 
    printf("Meter=%d\ninch=%d\nfeet=%d\ncm=%d",result_met, result_inch, result_feet, result_cm); 

    printf("\nWaiting for a character to be pressed from the keyboard to exit.\n"); 

    getch(); 

    return 0; 
} 
+1

T帽子並不足以描述什麼是錯的。所以你得到錯誤的輸出?請詳細說明。包括確切的輸入和輸出。 – chris

+2

「計算錯誤」不完全是描述性的。錯誤**如何**?錯誤的答案?錯誤的輸入?崩潰?變得有感覺並接管SkyNet? –

+3

更改'%d' - >'%f',其餘代碼應該可以工作。投票結束,因爲這不太可能有助於網站的其他訪問者。 – dasblinkenlight

回答

2

您的scanf_s()呼叫是錯誤的。第一個參數是一個格式字符串,它描述了正在讀取的內容。你的編譯器應該用當前代碼發出警告,如果不是,你需要增加警告級別,因爲注意到編譯器的警告會爲你解決這樣的問題。

一個合適的呼叫可能看起來像:

scanf_s("%d", &km); 
2

使用%f打印float類型,而不是%d,否則程序將調用未定義的行爲。

printf("Meter=%f\ninch=%f\nfeet=%f\ncm=%f",result_met, result_inch, result_feet, result_cm); 
0

是輸入讀取錯誤的是:

scanf_s(&km); 

應該

scanf_s("%d",&km); 

公里數的值可以是任何東西用原碼