3

簡単な fizzbuzz アプリケーションを作成して、C++ のスキルをテストしたかったのです。そのコードは以下に掲載されています。しかし、このアプリケーションを実行すると、おかしなことが起こります。これが私のコードです:

#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 ls コマンドの残り

編集:誰かがこれに出くわした場合に備えてcout << i、私のコンピューターの g++ コンパイラには C++11 のサポートがなかったため、else ステートメントを追加して実行することになりました。関数も短縮され、2 つの引数を受け入れる 1 つの関数に結合されましin

4

2 に答える 2

3

他のコメンターが言ったように、output = iここで問題です。の値はanから aにiキャストされ、そのループを実行すると、一連のASCII 文字を含む文字列が残ります。たとえば、、などです。intcharoutput97 == 'a'144 == 'É'

メイン関数のロジックを書き換えてcout << ...、if-else ブロック内で 3 つの呼び出しを単純に行うことを検討します。さらに、簡潔にするために、ismultipleN()関数を単に に置き換えることができます(i % 3 == 0)

于 2012-11-16T03:30:10.923 に答える
2

それ以外の

 output = i;

この回答で提案されている方法の1つを使用する必要があります。

例えば:

std::string to_string(int x) {
    std::stringstream out;
    out << x;
    return out.str();
}
于 2012-11-16T03:27:44.207 に答える