2016-12-17 7 views
-4

Я пытаюсь создать простую программу «fizzbuzz», где каждый раз, когда печатается кратное 3, на ней печатается «fizz», и каждый раз, когда печатается кратное 5, рядом с ним печатается «buzz». Однако, что происходит в этой программе, это то, что первый оператор if является истинным каждый раз, а каждый вывод имеет значение «Buzz!». рядом с ним. Почему это происходит? Что мне нужно реализовать, чтобы правильно программировать?Как я могу исправить это утверждение if?

for(int index = 1; index <= 100; ++index) { 
    cout << index << endl; 
    if (index == 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100) 
     cout << " Buzz!" << endl; 
    else if(index == 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99) 
     cout << " Fizz!" << endl; 
} 
+0

1. Эти '' '' '' '' '' '' '' '' не делают то, что они думают, что они делают. 2. Способ проверки того, является ли число делимым на 5, состоит в том, чтобы сравнить остаток деления на пять с нолем, т. Е. 'Число% 5 == 0' – dasblinkenlight

ответ

1

Оператор запятой в C++ означает что-то совершенно другое - она ​​отделяет два выражения, забывает результат первого и возвращает значение второго.

Поэтому первое утверждение технически может быть сокращен до:

if (100) { 
    ... 

, который всегда верно (любой ненулевой выражения в C/C++ оценивает как истинный).

Чтобы избежать такого большого сравнения, вы можете фактически использовать оператор %.

if (i%5 == 0) { 
    cout << " Buzz!" << endl; 
} 
else if (i%3 == 0) { 
    cout << " Fizz!" << endl; 
} 
+0

Спасибо всем. С этого момента я буду рассматривать модуль и исправить этот код с информацией, которую вы мне дали. – CosmicBatz

0

Это может быть легко очищено с использованием модуля (%).

for(int index = 1; index <= 100; ++index) { 
    cout << index << endl; 
    if (index % 5 == 0) 
     cout << " Buzz!" << endl; 
    else if(index % 3 == 0) 
     cout << " Fizz!" << endl; 
} 
Смежные вопросы