2015-10-09 1 views
0

упражнение подскажите для кода: напишите программу, в которой рассказывается, какие монеты должны давать за любое количество изменений от 1 цента до 99 центов. Используйте монеты достоинством 25 центов (четверти), 10 центов (десять центов) и 1 цент (пенни). Не используйте никелевые и полудолларовые монеты. Ваша программа будет использовать следующую функцию (среди прочих): void compute_coins (int coin_value, int & num, int & amount_left);Почему мой код не выводит (просто) цифры?

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

void prompt(int *amount_left); 
void remaining_change(int *amount_left, int coin_value); 
void compute_coins(int coin_value, int *num, int *amount_left); 
void output(string coin_name, int *num); 



int main() { 
    int change = 0, num = 0, amount_left = 0; 
    const int quarter = 25, dime = 10, penny = 1; 
    string q = "quarter(s)", d = "dime(s)", p = "penny(s)"; 

    prompt(&change); 
    compute_coins(quarter, &num, &amount_left); 
    remaining_change(&amount_left, quarter); 
    output(q, &num); 

    compute_coins(dime, &num, &amount_left); 
    remaining_change(&amount_left, dime); 
    output(d, &num); 

    compute_coins(penny, &num, &amount_left); 
    output(p, &num); 

} 

void prompt(int *change) 
{ 
    cout << "How much change is there? "; 
    cin >> *change; 
    cout << "You entered " << change << endl; 
    cout << "That is equal to: "; 
} 

void remaining_change(int *amount_left, int coin_value) 
{ 
    *amount_left = (*amount_left % coin_value); 
} 
void compute_coins(int coin_value, int *num, int *amount_left) 
{ 
    *num = *amount_left/coin_value; 
} 

void output(string coin_name,int *num) 
{ 
    cout << num << " " << coin_name << ", "; 
} 
+0

также это то, что он выводит: Сколько изменений есть? 54 Вы ввели 0x7fff6d1cbf08 То, что равняется: 0x7fff6d1cbf04 кварталов, 0x7fff6d1cbf04 dime (s), 0x7fff6d1cbf04 penny (s), – Al13y

+1

, выводит адрес памяти, вы должны выводить данные указателя вместо адреса памяти. соиЬ << * изменение; – vishal

+0

Я получил код, чтобы потушить данные сейчас, но он просто выводит 0. – Al13y

ответ

1

В prompt(), change является указателем, поэтому для того, чтобы вывести значение, которое change указывает вам будет необходимо изменить эту строку:

cout << "You entered " << change << endl; 

к:

cout << "You entered " << *change << endl; 

Тем не менее, вы можете использовать ссылку вместо указателя:

void prompt(int &change) 
{ 
    cout << "How much change is there? "; 
    cin >> change; 
    cout << "You entered " << change << endl; 
    cout << "That is equal to: "; 
} 

, и тогда вы бы просто назвать это как:

prompt(change); 

Это гораздо более идиоматических C++ - метод указателя является более «старой Skool» программирования C-стиле.

Ditto для других мест, где вы печатаете сам указатель, например. num.

+0

@SimonKraemer: спасибо - исправлено. –

1

Вы выводите значение указателей, а не значение объекта, на который указывает.

Простое исправление разыменования указателей первых:

cout << "You entered " << *change << endl; 
//      ^

cout << *num << " " << coin_name << ", "; 
// ^

Однако, я предлагаю не использовать указатели для таких вещей, как это вообще. Для встроенных типов вы должны взять ссылку, когда хотите обновить переменную и значение в противном случае.

Лично я бы не обновлял эти переменные изнутри функций, я бы выполнил необходимый ввод или вычисление и возвратил значение, которое нужно назначить.