2013-09-06 9 views
5

私は値のアスキータブを使ってランダムにパスワードを生成するプログラムを構築しています。 8文字のパスワードを生成します。コードは今、私はちょうど私が任意の重複を持っていけないので、正しい値を変更する方法を把握する必要があり実行されているそれらの変更とy [i]をCの変更可能な変数にする

#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; 
} 

+0

ポスト実際のエラーメッセージ:Y.

に修正して何もする必要はありません。 – Peter

+2

この行に構文エラーがあります: 'Check(point); /重複した値の文字列をチェックする'; '/'は '//'でなければなりません –

+0

Martinは問題を説明しました。すべてが変更可能ではありません(左辺値です)。この '(y [i] == y [x] && run)'は真または偽です。 trueまたはfalseをゼロに更新することはできません。 – dcaswell

答えて

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 

あなたはゼロとしてy[i]==y[x] && runboolean結果を変更することはできません。

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

2

あなたのエラーは、誤ってこれが最も可能性が高いあなたのコンパイラを混乱一部である

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

ラン= 0を設定していることのようです。

if (y[i]==y[x] && run==0) 
関連する問題