首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FizzBuzz灾难

FizzBuzz灾难
EN

Stack Overflow用户
提问于 2012-11-16 11:04:35
回答 2查看 1.4K关注 0票数 3

我想通过敲出一个快速的C++应用来测试我的fizzbuzz技能。它的代码发布在下面。然而,当我运行这个应用程序时,一些疯狂的事情发生了。下面是我的代码:

代码语言:javascript
运行
复制
#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来演示这一点。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 11:30:11

正如其他评论者所说,output = i是这里的问题所在。i的值从int转换为char,在运行该循环时将output字符串与序列ASCII characters一起保留。例如,97 == 'a'144 == 'É'等。

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

票数 3
EN

Stack Overflow用户

发布于 2012-11-16 11:27:44

而不是

代码语言:javascript
运行
复制
 output = i;

您应该使用this answer中建议的方法之一。

例如:

代码语言:javascript
运行
复制
std::string to_string(int x) {
    std::stringstream out;
    out << x;
    return out.str();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13409769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档