来自 class 方法的 Cout 什么都不做
Cout from class method does nothing
我有一个 class“烧杯”,代表一个烧杯,里面有 n 个骰子,有 n 个面。它有一个方法“roll”,其中 returns 一个包含 n 个元素的向量,其中每个元素代表一个骰子。然后我有另一个 class “板”,现在它只打印 beaker.roll 使用 cout;
生成的值
所以我调用了beaker.roll函数来传递结果来打印它们,但是它什么也没做。我没有编译 errors/IntelliSense 警告。我做错了什么?
#include <iostream>
#include <random>
#include <chrono>
#include <thread>
#include <vector>
using std::cout;
using std::vector;
class beaker {
public:
int diceCount, diceFaces;
beaker() {
diceCount = 2;
diceFaces = 6;
};
beaker(int count, int faces) {
diceCount = count;
diceFaces = faces;
};
//Dice values
vector<uint8_t> dice;
//METHODS
//RETURN DICE i VALUE
int diceValue(int d) {
return dice.at(d-1);
}
//ROLL DICE + RETURN RESULT
vector<uint8_t> roll() {
std::mt19937 mt(std::chrono::high_resolution_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> dist(1, diceFaces);
for (int i=0; i<diceCount; i++) {
dice.push_back(dist(mt));
}
return dice;
}
//RETURN LAST DICE NUMBERS
vector<uint8_t> result() {
return dice;
}
};
class board {
public:
void Print(vector<uint8_t> dice) {
for (int i=0; i<dice.size(); i++) {
cout << dice.at(i);
}
}
};
int main() {
beaker beaker;
board board;
board.Print(beaker.roll());
}
问题是 dice
中的值属于 uint8_t
类型,cout::<<
运算符将其解释为 unsigned char
,因此它打印出这些值作为 ASCII 字符。但是,值介于 1 和 6 之间,并且 ASCII characters less than 32 大部分是非打印字符,因此它们在输出中不可见。
要说服 cout::<<
运算符将值打印为整数,请将代码更新为:
void Print(vector<uint8_t> dice) {
for (int i=0; i<dice.size(); i++) {
cout << static_cast<int>(dice.at(i));
}
cout << std::endl; // just to make sure the buffer gets flushed ASAP
}
我有一个 class“烧杯”,代表一个烧杯,里面有 n 个骰子,有 n 个面。它有一个方法“roll”,其中 returns 一个包含 n 个元素的向量,其中每个元素代表一个骰子。然后我有另一个 class “板”,现在它只打印 beaker.roll 使用 cout;
生成的值所以我调用了beaker.roll函数来传递结果来打印它们,但是它什么也没做。我没有编译 errors/IntelliSense 警告。我做错了什么?
#include <iostream>
#include <random>
#include <chrono>
#include <thread>
#include <vector>
using std::cout;
using std::vector;
class beaker {
public:
int diceCount, diceFaces;
beaker() {
diceCount = 2;
diceFaces = 6;
};
beaker(int count, int faces) {
diceCount = count;
diceFaces = faces;
};
//Dice values
vector<uint8_t> dice;
//METHODS
//RETURN DICE i VALUE
int diceValue(int d) {
return dice.at(d-1);
}
//ROLL DICE + RETURN RESULT
vector<uint8_t> roll() {
std::mt19937 mt(std::chrono::high_resolution_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> dist(1, diceFaces);
for (int i=0; i<diceCount; i++) {
dice.push_back(dist(mt));
}
return dice;
}
//RETURN LAST DICE NUMBERS
vector<uint8_t> result() {
return dice;
}
};
class board {
public:
void Print(vector<uint8_t> dice) {
for (int i=0; i<dice.size(); i++) {
cout << dice.at(i);
}
}
};
int main() {
beaker beaker;
board board;
board.Print(beaker.roll());
}
问题是 dice
中的值属于 uint8_t
类型,cout::<<
运算符将其解释为 unsigned char
,因此它打印出这些值作为 ASCII 字符。但是,值介于 1 和 6 之间,并且 ASCII characters less than 32 大部分是非打印字符,因此它们在输出中不可见。
要说服 cout::<<
运算符将值打印为整数,请将代码更新为:
void Print(vector<uint8_t> dice) {
for (int i=0; i<dice.size(); i++) {
cout << static_cast<int>(dice.at(i));
}
cout << std::endl; // just to make sure the buffer gets flushed ASAP
}