2016-07-16 161 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时,存在另一个问题,因为即使没有任何宿舍或角钱,它也会在宿舍和硬币之间输出“,”。 –