C++输出奇怪的字符而不是数字 (Windows)
C++ outputs strange characters instead of numbers (Windows)
我需要为我的教育编写一个乐透生成器,它将随机滚动数字并检查重复条目并以其他方式替换它们。当我启动程序时,没有错误消息并且程序正在运行,但我只看到奇怪的字符而不是数字。问题的图片
我的代码有什么问题?
#include <iostream>
#include <array>
#include <time.h>
std::array<unsigned char, 6> lottoZahlen = {0, 0, 0, 0, 0, 0};
void arrayFuellen();
unsigned char checkDuplikate(unsigned char);
void arraySortieren();
int main()
{
arrayFuellen();
arraySortieren();
std::cout << "n---- Ihre Glueckszahlen lauten: ----" << std::endl;
for (unsigned char lottoGlueck : lottoZahlen)
{
std::cout << lottoGlueck << std::endl;
}
std::cout << "---- Glueckszahlen Ende ----" << std::endl;
}
void arrayFuellen()
{
srand(time(NULL));
unsigned char wuerfelZahl = 0;
unsigned char wuerfelZahlChecked = 0;
for (unsigned char i = 0; i < sizeof(lottoZahlen); i++)
{
wuerfelZahl = rand() % 45 + 1;
wuerfelZahlChecked = checkDuplikate(wuerfelZahl);
lottoZahlen[i] = wuerfelZahlChecked;
}
}
unsigned char checkDuplikate(unsigned char checkZahl)
{
srand(time(NULL));
bool dublette = false;
do
{
dublette = false;
for (unsigned char j = 0; j < sizeof(lottoZahlen); j++)
{
if (checkZahl == lottoZahlen[j])
{
checkZahl = rand() % 45 + 1;
dublette = true;
}
}
} while (dublette);
return checkZahl;
}
void arraySortieren()
{
unsigned char merker = 0;
bool vertauscht = false;
do
{
vertauscht = false;
for (unsigned char i = 1; i < sizeof(lottoZahlen); i++)
{
if (lottoZahlen[i - 1] > lottoZahlen[i])
{
merker = lottoZahlen[i];
lottoZahlen[i] = lottoZahlen[i - 1];
lottoZahlen[i - 1] = merker;
vertauscht = true;
}
}
} while (vertauscht);
}
char"是一种用于存储字符的类型,输出流将在 for 循环中将其解释为这样。因此,如果您的值为 65,它实际上将显示为大写字母 A(ASCII 值为 65(。若要显示数字,应使用输出流识别为数字的类型,例如"int"。
有几种方法可以执行所需的操作,将char
打印为整数/十进制值:
-
使用套管
int()
:std::cout << int(lottoGlueck) << "n";
-
使用好的旧(C风格(
printf()
,有人会说不要使用它,但是使用printf()
有优点和缺点。printf("%dn", lottoGlueck);
-
正如建议的那样,您可以使用
std::to_string()
,我个人不建议将其用于打印单个字符,仅仅是因为它将字符转换为字符串以打印出整数。
在生产代码中,我使用数字1,在调试中我使用数字 2。两者都有缺点/优点,但您可以阅读本文以更好地了解这些缺点/优点。
当涉及到将字符串作为十进制值时,您有std::to_string()
,也有std::cout << std::dec << string << "n"
。
您正在打印不可打印的字符: https://upload.wikimedia.org/wikipedia/commons/d/dd/ASCII-Table.svg [] 之间的字符不是可打印字符。
如果你写:int i = 5
然后std::cout << i
它将打印相应的字符,值为 5。但是值 5 不是字符"5",所以如果你希望它是一个可打印的数字,你需要转换它:std::cout << std::to_string(i)
(不确定这是否是你的意图,虽然:)(
除了问题的答案之外,您还可以使用 isprint(( 检查您的值是否可打印。
std::cout << isprint(lottoGlueck) << std::endl;
如果您的值不可打印,这将打印 0 (假(。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- C++输出奇怪的字符而不是数字 (Windows)
- 在Windows 10中,将Clocks_per_sec重新定义为更高的数字
- Windows Shell Automation InvokeVerb 基于数字而不是命令字符串
- 数字生成器性能linux vs windows
- <random> 在 Linux 中生成相同的数字,但在 Windows 中不生成
- c++中double的精确位数在windows和Linux中不同.为什么?Linux显示超过20个非零精度数字
- 可视化我们如何在C++和Windows API中验证openssl数字签名
- 我自己的驱动程序是否需要在Windows 7 x64中进行数字签名