2013-09-06 10 views
5

Buduję program, który losowo generuje hasło za pomocą ascii tabe wartości i może zawierać tylko jeden z każdego znaku. generuje hasło o długości 8 znaków.Dokonywanie y [i] modyfikowalnej zmiennej w 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; 
} 

z tych zmian jest kod działa teraz tylko muszę dowiedzieć się, jak zmienić prawidłową wartość, więc nie ma żadnego powielania.

+0

Napisz rzeczywisty komunikat o błędzie. – Peter

+2

Masz błąd składniowy w tym wierszu: 'Check (punkt);/sprawdza ciąg dla powielonych wartości'; '/' powinno być '//' –

+0

Martin opisał problem. Nie wszystko jest modyfikowalne (ma wartość l). To '(y [i] == y [x] && run)' jest prawdziwe lub fałszywe. I nie można zaktualizować wartości true lub false, aby uzyskać zero. – dcaswell

Odpowiedz

4

Fix:

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

Od swojej Charactor(*point); jest naprawdę nie robi nic w oparciu o *point a później użyć Check(point); prawdopodobnie rozpocząć skanowanie od początku łańcucha.

I

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

Nie można zmodyfikować boolean wynik y[i]==y[x] && run jako zero.

Uwaga: Jednak if (y[i]==y[x] && (run=0)) nie wysłałby tego błędu.

2

Twój błąd wydaje się być to, że są błędnie ustawienie run = 0 w

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

Jest to część, która najprawdopodobniej myli kompilator. Nie trzeba robić nic z Y.

Fix do:

if (y[i]==y[x] && run==0) 
Powiązane problemy