我想通过敲出一个快速的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来演示这一点。


编辑:如果有人遇到这种情况,我最终添加了一个else语句并在其中执行cout << i,因为我的计算机的g++编译器缺乏C++11支持。这些函数也被缩短并组合成一个函数,该函数接受两个参数:i和n。
发布于 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()函数。
发布于 2012-11-16 11:27:44
而不是
output = i;您应该使用this answer中建议的方法之一。
例如:
std::string to_string(int x) {
std::stringstream out;
out << x;
return out.str();
}https://stackoverflow.com/questions/13409769
复制相似问题