Создайте цикл, который будет выводить все числа, кратные 5, которые больше нуля и меньше 60 (не включая 60).

Это задание, которое я должен сдать в понедельник, и учитель не отвечает мне по электронной почте. Мой код работает, но в результате он продолжает показывать 0, и я не знаю, почему, и каждый раз, когда я пытаюсь его исправить, все ломается. Инструкции таковы: Создайте цикл, который будет выводить все числа, кратные 5, которые больше нуля и меньше 60 (не включая 60). Это код, который работает.

#include <stdio.h>
int main(void){
 int multiples, count;
 multiples = 5;
 count = 0;

while (count < 60){
    printf("%i \n", count);
    count = multiples + count;
    if (count)
}
system("pause");

Я искренне не понимаю, что я делаю неправильно здесь. Я понимаю, что не могу просто сделать (count ‹ 60 && count > 0), потому что я сделал count = 0, но мне нужно избавиться от полученного 0 желательно без переписывания всего моего кода.


person Annie L    schedule 19.10.2019    source источник
comment
Почему бы ему не напечатать 0? В подобных ситуациях полезно пригнуться и объяснить себе, почему ваш код правильный.   -  person GBlodgett    schedule 19.10.2019
comment
Должен ли это быть цикл while? Это абсолютно можно сделать с помощью while, но for может быть более естественным выбором цикла.   -  person erichamion    schedule 19.10.2019
comment
@GBlodgett, если код равен count = multiples + count, то не будет ли первое, что он запускает, будет count = 5 + 0, что равно 5, так почему сначала должно быть 0?   -  person Annie L    schedule 19.10.2019
comment
Первое, что он запускает, это printf. Это происходит до count = multiples + count, пока count все еще равен 0.   -  person erichamion    schedule 19.10.2019
comment
@erichhamion Как я это пропустил? Спасибо, что указали, что теперь он работает так, как мне нужно.   -  person Annie L    schedule 19.10.2019


Ответы (3)


Только не начинайте с 0, а лучше точно умножьте

#include <stdio.h>
int main(void){
int multiplier, count, value;
multiplier = 5;
count = 1;

do {
    value = count * multiplier;
    count++;
    printf("%i \n", value);
} while (value < 60)
system("pause");
person Марина Риман    schedule 19.10.2019

0 печатается, потому что при первом достижении printf("%i \n", count); в цикле while счетчик по-прежнему равен 0. Чтобы это исправить, вам просто нужно переключить строки (иметь count = multiples + count; перед printf("%i \n", count);).

Кроме того, чтобы не печатать 60, вам нужно добавить условие if.

while (count < 60){
    count = multiples + count;
    if(count!=60) {
        printf("%i \n", count);
    }
}

Кроме того, вы также можете просто начать count с 5:

#include <stdio.h>
int main(void){
int multiples, count;
multiples = 5;
count = 5;

while (count < 60){
    printf("%i \n", count);
    count = multiples + count;
}
system("pause");
person Eyal Golan    schedule 19.10.2019
comment
Я считаю, что здесь нужно изменить условие while. Это напечатает 60 в конце. - person erichamion; 19.10.2019
comment
@erichhamion Вы правы, я имел в виду проблему с печатью 0 - person Eyal Golan; 19.10.2019
comment
@EyalGolan Я мог бы начать count в 5, но я работаю над этим заданием часами, и я собираюсь изменить как можно меньше в надежде, что это не испортит остальную часть моего кода, и я смогу сделать перерыв. - person Annie L; 19.10.2019
comment
@AnnieL Если вы используете достойную систему управления исходным кодом (например, git), что вам должно быть, вы всегда можете просто зафиксировать свои изменения и сделать перерыв, а затем внести больше изменений, и если они сломают что-то вы просто вернетесь к своему предыдущему коммиту. Делайте коммиты часто... и, пожалуйста, не говорите, что вы не используете систему контроля версий/исходников.. - person Jesper Juhl; 20.10.2019

Я предлагаю использовать цикл for для подсчета кратных 5 до 60 в одной строке кода:

int count=0;
for (int i=5; i<60; i+=5) {cout<<i<<'\n'; count++;}
cout<<"Total multiples: "<<count;

Другой способ сделать это — использовать цикл do-while, чтобы изменить значение счетчика до того, как оно будет оценено предложением while.

person Camilo Ruiz    schedule 19.10.2019