университетская лаба по си
у меня университетская лаба по си, все вроде хорошо, быстро написал, но вот начал тестить и начались проблемы. Задача звучит так: для натурального числа К напечатать фразу "мы нашли К грибов в лесу", согласовав окончание слова "гриб" с числом К. Вот мой код:
#include "stdio.h"
#include "locale.h"
int main() {
setlocale(LC_ALL, "Rus"); // подключаем русский язык
int k, t;
scanf_s("%d", &k);
t = k;
k = k % 100; // получаем остаток от деления
if (20 < k) {
k = k % 10;
}
if (k == 2 || k == 3 || k == 4) {
printf("Мы нашли %d гриба\n", t);
}
if (k == 1) {
printf("Мы нашли %d гриб\n", t);
}
else { printf("Мы нашли %d грибов\n", t); }
}
Проблема заключается в том, что когда пользователь к примеру вводит число 102, то выводится в консоль "Мы нашли 102 гриба" (что верно), и "Мы нашли 102 грибов" (что неверно). Естественно, это происходит из-за else, но я не понимаю как исправить, просто не понимаю! Помогите новичку пожалуйста.

Ответы (1 шт):
Проблема в том, что if-выражения не связаны между собой. Получается, что сначала отрабатывает код первого if:
if (20 < k) {
k = k % 10;
}
Затем второго куска кода:
if (k == 2 || k == 3 || k == 4) {
printf("Мы нашли %d гриба\n", t);
}
А затем уже срабатывает этот код вместе (здесь else относится только к выражению k==1, то есть если оно неверно, то срабатывает код внутри else):
if (k == 1){
printf("Мы нашли %d гриб\n", t);
}
else { printf("Мы нашли %d грибов\n", t); }
Для того, чтобы решить проблему, почитай про else if. Например, это можно сделать тут: http://cppstudio.com/post/6449/?ysclid=l8dmf2tqwg278134678 (последний абзац пример кода с else if)