2013-09-06 8 views
5

Sto costruendo un programma che genera una password in modo casuale usando la tabella di valori ascii e può contenere solo uno di ciascun carattere. genera una password lunga 8 caratteri.Fare y [i] una variabile modificabile in 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; 
} 

con tali modifiche il codice viene eseguito ora devo solo capire come modificare il valore corretto in modo non ho doppioni.

+0

Invia il messaggio di errore effettivo. – Peter

+2

Si è verificato un errore di sintassi su questa riga: 'Verifica (punto);/controlla la stringa per i valori duplicati'; il '/' dovrebbe essere '//' –

+0

Martin ha descritto il problema. Non tutto è modificabile (è un lvalue). Questo '(y [i] == y [x] && run)' è vero o falso. E non puoi aggiornare true o false per essere zero. – dcaswell

risposta

4

Fix:

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

Dal momento che il Charactor(*point); non è realmente facendo nulla sulla base di *point e poi si utilizza Check(point); probabilmente per avviare una scansione dall'inizio della stringa.

E

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

Non è possibile modificare un risultato boolean di y[i]==y[x] && run come zero.

Nota: Tuttavia, if (y[i]==y[x] && (run=0)) non ha generato questo errore.

2

vostro errore sembra essere che si sta impostando per errore run = 0 in

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

Questa è la parte che molto probabilmente confonde il compilatore. Non ha a che fare nulla con Y.

Fix per:

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