FizzBuzz Бедствие

Я хотел проверить свои навыки C ++, разработав быстрое приложение fizzbuzz. Код для этого размещен ниже. Однако, когда я запускаю это приложение, происходит что-то сумасшедшее. Вот мой код:

#include <iostream>
#include <string>
using namespace std;

bool ismultiple3(int i) {
int res = i%3;
if (res == 0)
return true;
return false;
}

bool ismultiple5(int i) {
int res = i%5;
if (res == 0)
return true;
return false;
}

int main() {
string output;
for (int i = 1; i <= 100; i++) {
output = i;
if (ismultiple5(i) || ismultiple3(i)) {
output = "";
if (ismultiple3(i)) output.append("Fizz");
if (ismultiple5(i)) output.append("Buzz");
}
cout << output;
}
}

Поэтому, когда я запускаю и компилирую его, весь мой терминал портится. Кажется, что кодировка символов каким-то образом изменяется. Он по-прежнему принимает команды нормально, он просто выключен. Я побежал, чтобы продемонстрировать это.
Скомпилировано, запущено и ls
Остаток команды ls

Редактировать: В случае, если кто-то сталкивается с этим, я заканчивал тем, что добавил оператор else и cout << i в нем, потому что компилятору g ++ моего компьютера не хватало поддержки C ++ 11. Функции также были сокращены и объединены в одну функцию, которая принимает 2 аргумента, i а также n,

3

Решение

Как говорили другие комментаторы, output = i это проблема здесь. Значение i бросает из int к charоставив output строка с последовательностью Символы ASCII когда вы запускаете этот цикл. Например, 97 == 'a', 144 == 'É', и так далее.

Я хотел бы рассмотреть переписать логику в основной функции, чтобы просто иметь три cout << ... вызовы внутри блока if-else. Кроме того, ismultipleN() функции могут быть заменены просто (i % 3 == 0) для краткости.

3

Другие решения

вместо

 output = i;

Вы должны использовать один из методов, предложенных в этот ответ.

Например:

std::string to_string(int x) {
std::stringstream out;
out << x;
return out.str();
}
2

По вопросам рекламы [email protected]