#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");
}
}
ответ
Как насчет одной линии:
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
}
. Обратите внимание: если бы вы поместили код в кодовый блок на этой странице, я бы разместил пример «switch/case», но я didn [и немногие другие] хотели бы напечатать все это вручную. –
Иногда цепь 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);
}
Могли добавьте код? –
'printf (« Вы получаете% d slice (s) каждый \ n ", 8/number_of_people);' –
Положите код в вопрос, почему бы вам опубликовать ссылку на скриншот вашего редактора? –