Я хотел проверить свои навыки 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;
}
}
Поэтому, когда я запускаю и компилирую его, весь мой терминал портится. Кажется, что кодировка символов каким-то образом изменяется. Он по-прежнему принимает команды нормально, он просто выключен. Я побежал, чтобы продемонстрировать это.
Редактировать: В случае, если кто-то сталкивается с этим, я заканчивал тем, что добавил оператор else и cout << i
в нем, потому что компилятору g ++ моего компьютера не хватало поддержки C ++ 11. Функции также были сокращены и объединены в одну функцию, которая принимает 2 аргумента, i
а также n
,
Как говорили другие комментаторы, output = i
это проблема здесь. Значение i
бросает из int
к char
оставив output
строка с последовательностью Символы ASCII когда вы запускаете этот цикл. Например, 97 == 'a'
, 144 == 'É'
, и так далее.
Я хотел бы рассмотреть переписать логику в основной функции, чтобы просто иметь три cout << ...
вызовы внутри блока if-else. Кроме того, ismultipleN()
функции могут быть заменены просто (i % 3 == 0)
для краткости.
вместо
output = i;
Вы должны использовать один из методов, предложенных в этот ответ.
Например:
std::string to_string(int x) {
std::stringstream out;
out << x;
return out.str();
}