2013-01-03 3 views
0

필자는 최근 C 언어를 배우기 시작했으며 암호 데이터 보호 프로그램을 작성하려고합니다. 메신저는 null 값을 얻은 다음 파일 password.txt가 존재하는지 여부를 알아보기 위해 테스트해야하는 함수를 작성한 다음 사용자에게 마스터 비밀번호를 설정하고 반복하도록 요청합니다. 그러나 그것은 사용자가 암호를 반복하도록 허용하지 않습니다. 어떤 팁? - 환호 (++ 마음에 단지 C하지 C 유지)scanf가 응답하지 않습니까?

/*Headers*/ 
#include <stdio.h> 
#include <stdlib.h> 

#define MAX_LENGTH 99 

int main(void){ 

    /*Variable Declaration*/ 
    char password[] = "Lakaka"; 

    masterPassword(); 

    printf("Welcome to Fort-Knox."); 

getchar(); 
return 0; 
} 

int masterPassword(void){ 
    /*Password Comparison Variables*/ 
    char password[MAX_LENGTH]; 
    char password1[MAX_LENGTH]; 


    FILE*fp; 
    if (fp == NULL){ 
     printf("Choose a master password:\n"); 
     scanf("%c", password); 
     printf("Please repeat password:\n"); 
     scanf("%c", password1); 

     if (password == password1){ 
      printf("Password Accepted."); 
      fp = fopen("password.txt", "w+"); 
      printf("File Created"); 
      fclose(fp); 
      return 0; 
     } 
    } 


} 

답변

3

사용 %s하지 %c 형식 지정자, 문자열을 읽고있다. %c은 단일 문자 만 읽습니다. "%s" 대신 "%c"

%c

+0

아 감사합니다. 왜냐하면 변수가 char로 정의되어 있기 때문에 char에 % c를 사용해야했기 때문입니다. 죄송합니다 = ( –

0

사용

%s 문자열

scanf("%s", password); 
scanf("%s", password1); 
2

귀하의 서식 지정이 잘못에 대해 단 1 개의 문자입니다.

이 또한 잘못이다 :

if (password == password1) 

이것은 단지 포인터로 변환 배열을 비교합니다. 당신은 strcmp()를 호출하여, 문자 단위로 비교해야 더 안전 항상

strncmp(password,password1,MAX_LENGTH) 

키우면 :

if(strcmp(password, password1) == 0) 
{ 
    printf("match!\n"); 
} 
+0

저는 C 언어를 사용하는 제 2 언어 Python이 제 첫 번째 일 뿐이라는 점을 제가 비교할 수 없다는 것을 알지 못했습니다. 고마워요. –

0

당신이

scanf("%s", password); 

할 및 사용을 비교해야 :) ...

관련 문제