@komy_ccilky_kidaesh_pidr

Почему не работает код (c)?

Выводит всегда слово vorona, даже если число в диапазон не попадает. Помогите найти ошибку. Подлня не могу понять что не так
#include <stdio.h>
void main()
{
	printf("Enter the number in range of 1-99. \n");
	int a, v;
	scanf_s("%i", &a);
	int m = a % 10;
	if (((a>=11) && (a <= 14)) || (m=0) || ((m>=5) && (m<=9)))
	{
		v = 0;
	}
	else if ((m >= 2) && (m <= 4))
	{
		v = 1;
	}
	else if (m = 1)
	{
		v = 2;
	}
	else v=3;
	switch (v)
	{
	case 0:printf("%i voron", a); break;
	case 1:printf("%1 voroni", a); break;
	case 2:printf("%i vorona", a); break;
	case 3:printf("uncorrected"); break;
	}
	_getch();
	return 0;
}

задание: Дано неотрицательное число k(1-99). Напечатать фразу "k ворон". (Пример. Если K = 23, то должно быть напечатано "23 вороны", если K = 51 - то "51 ворона", обратить внимание на случай K =11,12,13,14).
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
https://ru.wikipedia.org/wiki/Условия_Йоды
Аж в двух местах.

Причём в Си не нужно ставить в сложных условиях скобки, как в Паскале, вполне покатит такое…
if ((a >= 11 && a <= 14) || m == 0 || (m >= 5 && m <= 9))

Но нет, вы наставили лишних скобок и заглушили ошибку.

Также, что мне не нравится.
Вместо 0,1,2,3 лучше использовать константы MANY/FEW/ONE/UNKNOWN.

В case 1 символ подстановки плохо содран с доски.

Если условие на MANY самое сложное и выполняется по остаточному принципу — почему его делаем самым первым? Лучше что-то типа…
• 10…20 → MANY
• 1 → ONE
• 2…4 → FEW
• Иначе MANY
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что у вас в условиях не сравнения (==), а присвоения (=).
Используйте стиль Йоды.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы