2013-09-06 28 views
5

Tôi đang xây dựng một chương trình tạo ngẫu nhiên mật khẩu bằng cách sử dụng tab ascii của các giá trị và chỉ có thể chứa một trong mỗi char. nó tạo ra một mật khẩu dài 8 char.Đặt y [i] biến có thể sửa đổi trong 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; 
} 

với những thay đổi mã đang chạy bây giờ tôi chỉ cần tìm ra cách thay đổi giá trị chính xác để tôi không có bất kỳ trùng lặp nào.

+0

bài viết được thông báo lỗi thực tế. – Peter

+2

Bạn có lỗi cú pháp trên dòng này: 'Kiểm tra (điểm);/kiểm tra chuỗi cho các giá trị được nhân đôi'; '/' nên là '//' –

+0

Martin đã mô tả vấn đề. Không phải mọi thứ đều có thể sửa đổi (là một giá trị). Điều này '(y [i] == y [x] && chạy)' là đúng hoặc sai. Và bạn không thể cập nhật đúng hay sai thành 0. – dcaswell

Trả lời

4

Fix:

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

Kể từ Charactor(*point); của bạn được thực sự không làm bất cứ điều gì dựa trên *point và sau đó bạn sử dụng Check(point); lẽ để bắt đầu quá trình quét từ đầu của chuỗi.

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

Bạn không thể sửa đổi một kết quả boolean của y[i]==y[x] && run như bằng không.

Lưu ý: Tuy nhiên if (y[i]==y[x] && (run=0)) sẽ không đưa ra lỗi này.

2

lỗi của bạn dường như thể là bạn đang nhầm lẫn thiết chạy = 0 trong

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

Đây là phần mà rất có thể lẫn lộn trình biên dịch của bạn. Không nhất thiết phải làm bất cứ điều gì với Y.

Fix để:

if (y[i]==y[x] && run==0) 
Các vấn đề liên quan