5

値の ascii テーブルを使用してパスワードをランダムに生成し、各文字を 1 つだけ含むことができるプログラムを構築しています。8 文字の長さのパスワードを生成します。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define SIZE 10

char Charactor(char x);
void Check(char* y);

int main()
{
char string[SIZE];//defines varriables
char* point;
point=&string[SIZE];
srand(time(NULL));
for (int i=0;i<SIZE-1;i++)//empties out the string
{
    string[i]='\0';
}
for (int i=0;i<SIZE-2;i++)//randomizes a char for each space in the string
{
    string[i]=Charactor(*point);
}
Check(point);/checks the string for duplicated values
printf("%s\n",string);//prints string on screen
}

char Charactor(char x)
{
int rnd=0;
rnd=rand()%2;//chooses char or number using ascii
if (rnd==0)
{
    rnd=rand()%10+48;
}
else
{
    rnd=rand()%26+65;
}
x=(char)rnd;
return x;
}

void Check(char* y)
{
int run=0;
for (int i=0; i<SIZE-2;i++)
{
    for (int x=0; x<SIZE-2; x++) 
    {
        if (y[i]==y[x] && run=0)
        {
            run++;
            continue;
        }
        else
        {
            y[i]='\0';
            y[i]=Charactor(*y);
        }
    }
}
return;
}

これらの変更により、コードが実行されているので、正しい値を変更する方法を理解する必要があるだけなので、重複はありません。

4

2 に答える 2

4

修理:

char* point =&string[0]; //Make it to point to first element

Charactor(*point);に基づいて実際には何もしていないので、文字列の先頭からスキャンを開始するためにおそらく*point使用します。Check(point);

 if (y[i]==y[x] && run==0)
                      ^^Use Equality check

as zeroのboolean結果を変更することはできません。y[i]==y[x] && run

注:ただしif (y[i]==y[x] && (run=0) )、このエラーはスローされませんでした。

于 2013-09-06T17:51:17.033 に答える
2

あなたのエラーは、誤って run=0 を設定しているようです

if (y[i]==y[x] && run=0)

これは、コンパイラを混乱させる可能性が最も高い部分です。Yとは何もする必要はありません。

修正:

if (y[i]==y[x] && run==0)
于 2013-09-06T17:53:56.077 に答える