2012-01-05 2 views
4

Я сгенерировал код, который учитывает минимальное количество 20, 10, 5, 2 и 1, что будет составлять определенную пользователем сумму. Пользователю разрешено вводить целые числа, т. Е. Нет десятичных значений. У меня есть два вопроса.Счетчик денег С программа

  1. Если деноминация не требуется, программа выдает случайное число вместо 0. Как я могу это исправить?
  2. Возможно ли создать функцию, которая могла бы заменить все операторы if и, возможно, операторы printf? Я новичок в функциях, поэтому я немного потерял их.

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main(void) 
{ 
int pounds; 
int one, two, five, ten, twenty; 

    printf("Enter a pounds amount with no decimals, max E999999: \n"); 
    scanf("%d", &pounds); 
    printf("%d\n", pounds); 

    if(pounds >= 20) 
    { 
     twenty = (pounds/20); 
     pounds = (pounds-(twenty * 20)); 
     printf("%d\n", pounds); 
    } 
    if(pounds >= 10) 
    { 
     ten = (pounds/10); 
     pounds = (pounds-(ten * 10)); 
     printf("%d\n", pounds); 
    } 
    if(pounds >= 5) 
    { 
     five = (pounds/5); 
     pounds = (pounds-(five * 5)); 
     printf("%d\n", pounds); 
    } 
    if(pounds >= 2) 
    { 
     two = (pounds/2); 
     pounds = (pounds-(two * 2)); 
     printf("%d\n", pounds); 
    } 
    if(pounds >= 1) 
    { 
     one = (pounds/1); 
     pounds = (pounds-(one * 1)); 
     printf("%d\n", pounds); 
    } 


printf("The smallest amount of denominations you need are: \n"); 
printf("20 x %d\n", twenty); 
printf("10 x %d\n", ten); 
printf("5 x %d\n", five); 
printf("2 x %d\n", two); 
printf("1 x %d\n", one); 

return 0; 
} 
+0

Спасибо, что все запомнят, чтобы объявить их с этого момента. Как насчет другой части моего вопроса относительно функций? Кто-нибудь позаботится об этом? – adohertyd

+0

Для создания функции, что именно вы хотите, чтобы функция выполняла? Обычно вы должны использовать функции для повышения удобочитаемости или для повторного использования кода. –

+0

Привет, Джек, мне было интересно, есть ли функция, которая заменит количество инструкций «if» в программе. Единственное, что я делал с функциями до сих пор, - это повышение удобочитаемости, но я знаю, что хорошая функция может заменить большие сегменты кода в программе в некоторых случаях. – adohertyd

ответ

5

Это отличный пример того, почему вы должны инициализируйте свои переменные при их объявлении.

Если pounds<20, то twenty никогда не будет инициализирован. В C переменные имеют (в основном) случайное значение, назначенное им, пока вы не замените его чем-то другим.

Вам просто нужно сделать это:

int one = 0, two = 0, five = 0, ten = 0, twenty = 0; 
2

Для выхода 0 просто инициализировать все переменные в 0, в противном случае они будут присвоены значения «мусор»:

int one = 0, two = 0, five = 0, ten = 0, twenty = 0; 
2

Это всегда хорошая практика, чтобы инициализировать все переменные в 0, когда вы объявите их. Таким образом, вы не получите случайное значение, если нет никаких номиналов. Вы можете объявить и начать переменные в то же время, делая это:

или если их много:

int a = 0, b = 0, c = 0; 

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