首先,我非常清楚还有其他类似的帖子。但无论出于何种原因,我都无法让它发挥作用(#imanoob)。
上下文:我在c ++中使用密码生成器,基本上它使用rand生成数字,这些数字直接对应于ASCII字符。
因此,生成数字很容易,但我需要将其转换为ASCII等价物以实际生成可用的密码。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main ()
{
//Initializing variables.
int type = 0;
int character = 0;
char print = character;
//Generator.
srand(time(NULL));
for (int i=0; i<10;i++)
{
type = rand()%(3-1+1)+1;//Determines: 1 = Uppercase, 2 = Lowercase, 3 = Number.
if (type == 1)//If Uppercase.
{
character = rand()%(90-65+1)+65;//Determines Uppercase character to be generated.
cout<<print<<endl;
}
if (type == 2)//If Lowercase.
{
character = rand()%(122-97+1)+97;//Determine Lowercase character to be generated.
cout<<print<<endl;
}
if (type == 3)//If Numerical.
{
character = rand()%(57-48+1)+48;//Determines Number to be generated.
cout<<print<<endl;
}
}
}
在我上面发布的代码中,你可以看到我上次试图公然告诉程序变量&#34;字符&#34;需要用作实际角色。是的,我是愚蠢的。
我可以在这里获得一些见解。如果有一个链接可以提供到这个问题,我会很高兴。我真的不在乎我是否会被遗忘。
好的,似乎有点混乱。 Rand生成一个介于65和90之间的数字。这些数字对应于ASCII表上的大写字母。我想在控制台上打印字母,而不是生成的数字。
答案 0 :(得分:1)
当你写这个
print
您告诉编译器您希望它将变量character
初始化为变量character
的当前值(当时恰好为零)。如果您希望将当前值设置为不同类型的变量,则需要在重新分配character = rand()%(90-65+1)+65;//Determines Uppercase character to be generated.
print = (char)character;
cout<<print<<endl;
之后执行此操作:
character = rand()%(90-65+1)+65;//Determines Uppercase character to be generated.
cout<<(char)character<<endl;
但是,您不必进行重新分配,因为在打印之前直接进行投射就足够了:
character = rand()%('Z'-'A'+1)+'A';
注意:虽然可以使用ASCII字符的十进制值,但如果使用字符常量,代码会变得更容易阅读:
{{1}}
答案 1 :(得分:0)
可以尝试替换
cout<<print<<endl;
通过
cout<<(char)character;
然后你会明白你错过了什么。