I was creating the FizzBuzz program in C++, where you print 1-100 and replace multiples of 3 with "Fizz", multiples of 5 with "Buzz" and multiples of both 3 and 5 with "FizzBuzz".
Although on running the code, I receive no errors, but the numbers 6, 21, 36 etc. don't get replaced with "Fizz" whereas the numbers 10, 25, 40 etc. don't get replaced with "Buzz".
I don't understand why this is happening.
My code is given below:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i < 101; i++)
{
if ((i%3) == 0 && (i%5) == 0)
{
printf("FizzBuzz ");
i++;
}
else if ((i%3) == 0)
{
printf("Fizz ");
i++;
}
else if ((i%5) == 0)
{
printf("Buzz ");
i++;
}
printf("%d ", i);
}
return 0;
}
In my opinion, the expected output should be(using code from Geeks for Geeks):
[Running] cd "d:\Projects\VS Code\Jetlag\helloworld\" && g++ fzz.cpp -o fzz && "d:\Projects\VS Code\Jetlag\helloworld\"fzz
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz
[Done] exited with code=0 in 6.043 seconds
This is the exact output I get:
[Running] cd "d:\Projects\VS Code\Jetlag\helloworld\" && g++ FizzBuzz.cpp -o FizzBuzz && "d:\Projects\VS Code\Jetlag\helloworld\"FizzBuzz
1 2 Fizz 4 Buzz 6 7 8 Fizz 10 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz 21 22 23 Fizz 25 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz 36 37 38 Fizz 40 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz 51 52 53 Fizz 55 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz 66 67 68 Fizz 70 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz 81 82 83 Fizz 85 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz 96 97 98 Fizz 100
[Done] exited with code=0 in 0.987 seconds
As can be seen above, some numbers do not get replaced.
Any help would be appreciated.
There are several issues in your code:
You increment i
both in the for
loop statement and under the if
s. Since you need to increment it in each iteration, the proper place is just in the for
statement.
The last print for the number itself should be under an else
block (following the previous if
/else if
s): you should print the number itself only if the previous cases handled by the if
/else if
s (for "FizzBuzz", "Fizz" and "Buzz") did not hold, and this is what the final else
is for (see in the fixed version below).
Although it can work, it is not recommended to use C I/O in C++. Instead you can use std::cout
from <iostream>
that you #include
d anyway. An even more modern way (from C++23) would be to use std::print
.
It is recommended to avoid using namespace std;
. See here: What's the problem with "using namespace std;"?.
A fixed version:
#include <iostream>
int main()
{
for (int i = 1; i < 101; i++)
{
if (((i % 3) == 0) && ((i % 5) == 0)) {
std::cout << "FizzBuzz ";
}
else if ((i % 3) == 0) {
std::cout << "Fizz ";
}
else if ((i % 5) == 0) {
std::cout << "Buzz ";
}
else { // this block will be executed only if the previous cases did not hold
std::cout << i << " ";
}
}
}