2016-09-21 2 views
-4

Можно ли это сделать лучше?

#include <stdio.h> 

int calculate_pizza_share(int number_of_people); 

int main() { 
    int num_of_people; 

    printf("how many people are shairng this pizza? "); 
    scanf("%d", &num_of_people); 

    calculate_pizza_share(num_of_people); 

    return 0; 
} 

int calculate_pizza_share(int number_of_people) { 
    if (number_of_people == 1) { 
    printf("You get %d slice(s) each\n", 8/number_of_people); 
    } else if (number_of_people == 2) { 
    printf("you get 4 slice(s) each\n"); 
    } else if (number_of_people == 3) { 
    printf("you get 2 slice(s) each\n"); 
    } else if (number_of_people == 4) { 
    printf("you get 2 slice(s) each\n"); 
    } else if (number_of_people == 5) { 
    printf("you get one slice(s) each\n"); 
    } else if (number_of_people == 6) { 
    printf("you get one slice(s) each\n"); 
    } else if (number_of_people == 7) { 
    printf("you get one slice(s) each\n"); 
    } else if (number_of_people == 8) { 
    printf("you get one slice(s) each\n"); 
    } 
} 
+1

Могли добавьте код? –

+1

'printf (« Вы получаете% d slice (s) каждый \ n ", 8/number_of_people);' –

+1

Положите код в вопрос, почему бы вам опубликовать ссылку на скриншот вашего редактора? –

ответ

2

Как насчет одной линии:

printf("You get %d slice(s) each\n",8/number_of_people); 

Вы не получите "один" вместо "1", но я думаю, что простота переопределяет это.

Вместо этого, вся if/else «лестница» может быть заменен switch/case


UPDATE:

исправили проблему я имел с редактором кода теперь в должность.

Хорошо, здесь оба пути. Я думаю, что одна линия по-прежнему лучший, но я заменил лестницу с switch:

#include <stdio.h> 

int calculate_pizza_share(int number_of_people); 

int 
main() 
{ 

    int num_of_people; 

    printf("how many people are shairng this pizza? "); 
    scanf("%d", &num_of_people); 

    calculate_pizza_share(num_of_people); 

    return 0; 
} 

int 
calculate_pizza_share(int number_of_people) 
{ 

#ifndef SWITCH 
    printf("You get %d slice(s) each\n", 8/number_of_people); 
#else 
    switch (number_of_people) { 
    case 5: 
    case 6: 
    case 7: 
    case 8: 
     printf("You get one slice each\n"); 
     break; 
    default: 
     printf("You get %d slice(s) each\n", 8/number_of_people); 
     break; 
    } 
#endif 
} 
+0

. Обратите внимание: если бы вы поместили код в кодовый блок на этой странице, я бы разместил пример «switch/case», но я didn [и немногие другие] хотели бы напечатать все это вручную. –

0

Иногда цепь if/else if правильный путь, особенно при генерации английских фраз, связанных с числовыми величинами. Но ищите способы уменьшить количество условий. В этом примере, вы действительно только три (действительные) условия

  • 1 человек: получает в целом пиццу
  • 2,3, или 4-х человек: целое число математика падает дробную часть от деления, так 8/number_of_people будет дать правильный ответ на все эти
  • 5,6,7,8: целочисленное деление дает правильный ответ, но сообщение отличается, поэтому рассматривать их как отдельное условие

Кроме того, вы должны всегда предполагайте, что пользователь наберет бессмыслицу (когда будет предоставлена ​​возможность). Таким образом, вы должны проверить возвращаемое значение из scanf, и быть готовы к обработке чисел, которые меньше 1 и больше 8.

Имея это в виду, вот что код выглядит следующим образом:

#include <stdio.h> 

void calculate_pizza_share(int number_of_people) 
{ 
    if (number_of_people < 1) 
     printf("You need some people to eat that pizza\n"); 
    else if (number_of_people == 1) 
     printf("You get the whole pizza\n"); 
    else if (number_of_people <= 4) 
     printf("You get %d slices each\n", 8/number_of_people); 
    else if (number_of_people <= 8) 
     printf("You get one slice each\n"); 
    else 
     printf("You need to order more pizza\n"); 
} 

int main(void) 
{ 
    int num_of_people; 

    printf("how many people are sharing this pizza? "); 

    if (scanf("%d", &num_of_people) != 1) 
     printf("Was hoping for a number between 1 and 8\n"); 
    else 
     calculate_pizza_share(num_of_people); 
}