2014-05-09 126 views
0

我想寫一個C++程序,它由3個函數組成,一個用於輸入,一個用於計算,另一個用於輸出。該程序應該以英尺和英寸爲輸入,然後將轉換後的米和釐米值打印回用戶。我覺得有什麼問題通過引用調用,因爲我仍然在學習如何正確地使用它,反正這裏的代碼寫3個函數將C和C中的英尺和英寸轉換爲米和釐米?

#include<iostream> 
using namespace std; 
void input(double feet , double inches); 
void calc(double &feet , double &inches); 
void output(double &feet , double &inches); 
void main() 
{ 
double feet1 , inches1; 
char ans; 
do 
{ 
    input(feet1,inches1); 
    calc(feet1,inches1); 
    output(feet1,inches1); 
    cout<<"Would you like to calculate again? y/n : "; 
    cin>>ans; 
} 
while(ans == 'y' || ans == 'Y'); 
} 
void input(double feet , double inches) 
{ 
cout<<"Enter feet : "; 
cin>>feet; 
cout<<"Enter inches : "; 
cin>>inches; 
} 
void calc(double &feet , double &inches) 
{ 
double meters , centimeters; 
meters = feet * 0.3048; 
centimeters = inches * 2.54; 
} 
void output(double &feet , double &inches) 
{ 
calc(feet,inches); 
cout<<"Converted feet to metres : "<<metres; 
cout<<"Converted inches to centimeters : "<<centimeters; 
} 
+2

使它成爲'void input(double&feet,double&inches)' –

+1

另外,calc不會返回任何東西。 –

+1

您已將'functional-programming'添加到標籤。然而你的程序完全是程序性的。另外,請縮進您的代碼。 – user2079303

回答

0

你配對的腳米,用釐米英寸的方式是會得到你在一個糾結中:對於各種轉換,最終英寸大於12或大於100釐米。

如果我是你,我只保留兩個變量 - 米和英尺 - 並應用它們之間的轉換。 然後,您可以完全刪除引用,因爲轉換函數將返回單個值。

然後,英尺轉換爲英尺和英寸,您可以使用

(int)feet

的腳部分

(feet - (int)feet) * 12

爲英寸的一部分。

3

您有(至少)三個問題:第一個是您修改傳遞給input函數的參數,但由於參數是按值傳遞的(即複製),所以您只修改副本。你需要通過引用來傳遞參數(即使你不需要它們,你也可以使用其他函數進行參數傳遞)。

第二個問題是在calc函數中,你聲明meterscentimeters爲局部變量。一旦函數返回,那些變量超出範圍,不能從其他地方引用。

第三個問題,這應該給你一個編譯錯誤,是你嘗試使用metres(拼寫檢查,這是不一樣的calc)和centimeters從輸出功能,並且還有未聲明的變量。

+2

+1,儘管(不幸的是)我們的美國同事喜歡使用'米'等 – Bathsheba

+0

所以你說我必須使第一個函數有引用參數調用,但對於其他2個函數,我應該繼續使用通過值?另外我該如何解決你提到的第二個問題? 謝謝:) –

+0

@KareemYoussef關於參數,是的,這是正確的。至於第二個和第三個問題,簡單的解決方案是使這些變量全局化。一個更好的解決方案可能是需要更多(引用)參數來「calc」來「返回」這些變量,然後將它們作爲簡單(非引用)參數傳遞給'output'。 –

0
void input(double feet , double inches); 

當你想改變英尺和英寸,您可以使用引用就像你在其他功能都做。

void calc(double &feet , double &inches) 

在此功能中,您可以更改本地「米」和「釐米」,但離開此功能時會丟失。 此外,你對腳和英寸不做任何事情,所以你不需要參考。 您可以用類似的東西改變它:

void calc(const double feet , const double inches, double &meters, double &centimeters) 

現在你可以調用與「輸入」的數據(英尺,英寸)該功能和「輸出」(米,釐米)。

在輸出函數中,我不確定是否要調用它內部的calc或者它是否有錯誤(因爲calc函數也在main/while循環中調用),但在輸出函數中,您需要給它米和釐米。或者因爲它是如此計算給你你需要的數據,但不要在do-while循環中調用calc。其他

事情:

#include<iostream> 
using namespace std; 
#include<iostream> 
using namespace std; 

一次就足夠了。

#include<iostream> 
#include<iostream> 
using namespace std; 
相關問題