2016-11-09 48 views
-3

好吧,所以基本上,我想製作一個程序,將採取185的KPH並將其轉換爲MPH一直到0像這樣。 (使用原型)每小時 公里的時速轉換爲英里:我的C代碼中的語法錯誤?

Kph  Mph 
185  115 
180  112 
175  109 
... ... 
10  6 
5  3 
0  0 

不幸的是我的轉換是有點過了,能有人傾聽爲什麼,可能是一些信息?

#include <stdio.h> 

// Prototypes 
double mph2kph(double); // convert Miles to KM 
double kph2mph(double); // convert KM to Miles 

int main() 
{ 

    int loop = 1; 
    double kph = 185;    // kilometers per hour 
    double mph = 115;    // miles per hour for computation 

    printf("Kilometers per hour converted to miles per hour: \n"); 
    printf("Kph   Mph\n"); // Display Header 

    while (loop == 1){ 
     printf("%.2d  %.2d \n", kph, kph2mph(kph)); 
     break; 
    } 
loop = 0; 

} 

//Other Functions: 
double mph2kph(double x){ 
    return x*1.61; 
} 

double kph2mph(double x){ 
    return x*1.61; 
} 

輸出=

Kilometers per hour converted to miles per hour:                                    
Kph   Mph                                            
40325120  38090656 
+0

如果編譯它不是「語法錯誤」。這可能是錯誤編寫的代碼。 – user2864740

+1

是的,你的代碼確實是微不足道的。在兩種情況下它怎麼可能是相同的公式? – user2864740

+4

'%d'用於'int'參數,而不是'double'參數。 – aschepler

回答

0

我已經做了一些改動你的程序,讓您所需的輸出。您的程序中的某些錯誤已被其他一些用戶識別出來。比較這與你的,並嘗試學習。祝你好運!

#include <stdio.h> 

// Prototypes 
double mph2kph(double); // convert Miles to KM 
double kph2mph(double); // convert KM to Miles 

int main() 
{ 

int loop = 1; 
int kph = 185;    // kilometers per hour 
double mph = 115;    // miles per hour for computation 

printf("Kilometers per hour converted to miles per hour: \n"); 
printf("Kph   Mph\n"); // Display Header 

while (kph != -5){ 
    printf("%d  %.2lf \n", kph, kph2mph(kph)); 
    getchar(); 
    kph = kph - 5; 
} 

} 

//Other Functions: 
double mph2kph(double x){ 
    return x*1.61; 
} 

double kph2mph(double x){ 
    return x/1.61; 
} 
+0

感謝您的幫助,我不知道一個while循環將是最好的選擇。我將如何完成循環直到kph = 0和mph = 0? – Ardowi

+0

條件'kph!= -5'確保'while'循環持續到kph達到-5。請注意,kph在每次迭代中減少5。 – VHS

2

您正在使用%d顯示您的最終結果,它用於int變量。在你的情況,因爲你使用double變量,你應該去%f%lf

printf("%.2lf  %.2lf \n", kph, kph2mph(kph)); 

此外,您的公里每小時英里每小時轉換功能是錯誤的。你應該劃分而不是相乘。

double kph2mph(double x){ 
    return x/1.61; 
} 

與修正測試您的代碼將導致正確的結果:

Kilometers per hour converted to miles per hour: 
Kph   Mph 
185.00  114.91 
+0

['%lf'和'%f'的處理方式與'printf']相同(http://stackoverflow.com/a/4264154/1270789)。 –

+0

@ KenY-N公平點。我正在以這種方式編輯答案。 – Isuka

+0

@Isuka:儘管'%f'可以正常工作,但是沒有理由編輯答案。恰恰相反,因爲C99'%lf'由'printf'支持。對'double'使用'%lf'並保留'float'爲'%f'是更好的主意。這使得'printf'與'scanf'保持一致。 – AnT