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 命令的剩余部分

编辑:如果有人遇到这个问题,我最终添加了一个 else 语句并cout << i在其中执行,因为我的计算机的 g++ 编译器缺乏 C++11 支持。这些函数也被缩短并组合成一个接受 2 个参数的函数,i并且n.

4

2 回答 2

3

正如其他评论者所说,output = i这是这里的问题。将值i从 a 强制转换int为 a ,当您运行该循环时char,该output字符串将带有一个序列ASCII 字符。例如,97 == 'a'144 == 'É'等。

我会考虑重写主函数中的逻辑,以便cout << ...在 if-else 块中简单地进行三个调用。此外,为了简洁起见,这些ismultipleN()功能可以简单地替换(i % 3 == 0)为。

于 2012-11-16T03:30:10.923 回答
2

代替

 output = i;

您应该使用此答案中建议的方法之一。

例如:

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