2016-07-16 188 views
0

我是一個初學者的編碼器,我需要一些關於如何我的代碼可以輸出正確的語法的想法。邏輯錯誤,需要幫助不能找出循環邏輯

如果我輸入數字輸出和額外的「,」,因爲它仍然貫穿並看到(amount_left> 0)。 我如何做到這一點,如果不存在四分之一或一角硬幣它不會輸出「,」?

#include <cstdio> 
#include <iostream> 

using namespace std; 

void compute_coins(int coin_value, int& number, int& amount_left); 

int main(){ 
int amount_left, number; 

while(amount_left > 1 || amount_left < 99){ 
    cout << "Enter number of cents (or zero to quit):" << endl; 
    cin >> amount_left; 
if (amount_left == 0){ 
    break; 
} 
else{ 
    cout << amount_left << " cents can be given as "; 
    compute_coins(25, number, amount_left); 
    if (number == 1){ 
    cout << "1 quarter"; 
    } 
    else if (number > 0){ 
    cout << number << " quarters"; 
    } 
    if (amount_left > 0){ 
    cout << ", "; 
    } 

    compute_coins(10, number, amount_left); 
    if (number == 1){ 
    cout << "1 dime"; 
    } 
    else if (number > 1){ 
    cout << number << " dimes"; 
    } 
    if (amount_left > 0){ 
    cout << ", "; 
    } 
    compute_coins(1, number, amount_left); 
    if (number == 1){ 
    cout << "1 penny"; 
    } 
    else if (number > 1){ 
    cout << number << " pennies"; 
    } 
    std:: cout << "."; 
} 
cout << endl; 
    } 
    return 0; 
} 
void compute_coins(int coin_value, int& number, int& amount_left){ 
    number = amount_left/coin_value; 
    amount_left = amount_left - (number * coin_value); 
} 
+0

當'amount_left'爲零時,在檢查它們之前,您的代碼中的硬幣和便士會發生什麼情況? – 1201ProgramAlarm

+0

我試着在循環之外放入amount_left if else參數。但是在每次輸出結束時,我只能得到一個句號,如果有一角錢或一分錢,就沒有逗號。 –

+0

你可以試試。在調試器中瀏覽它,看看發生了什麼。 – 1201ProgramAlarm

回答

0

期望的是一段時間,並且恰好一個週期必須在所有數量打印出來之後出現。

因此,編寫複雜的代碼來試圖弄清楚是否應該在代碼的其餘部分之前打印一段時間(對於所有剩餘的面值)完成是沒有邏輯意義的。

只是擺脫那些打印所有那些句點的代碼,在所有那些尷尬的if/else語句中。

在一切的盡頭,只需執行

std::cout << "."; 

沒有if S,else S,或但是。

只關注寫出所有面值的計數問題,用逗號正確分隔。忘掉尾隨時期。請專注于格式化所有可能名稱的逗號分隔列表。把你的想法放在尾隨的時期。

然後,一旦你得到所有的工作,只需追加

std::cout << "."; 

末,和收工。這是一個100%的保證,或者你的退款,在輸出結束時只有一個週期。

+0

我的逗號怎麼樣?我添加了std :: cout <<「。」;在最後,但我沒有在宿舍和硬幣之間的逗號。 –

+0

我沒有提到任何關於生成逗號的代碼。這些似乎是正確生成的。生成逗號的現有代碼或多或少都很好,並且不需要更改。 –

+0

但是,當輸入> 25或> 10時,存在另一個問題,因爲即使沒有任何宿舍或角錢,它也會在宿舍和硬幣之間輸出「,」。 –