2017-10-21 11 views
0
void signup(struct user *u) 

{ char c_pswd[80]; 
    int i,flag=1; 

    clrscr(); 

    printf("\n>ENTER FULL NAME: "); 
    gets(u->name);//scanf("%s",u->name); 

    printf("\n>ENTER USERNAME: "); 
    scanf(" %s",u->username); 

    printf("\n>ENTER DATE OF BIRTH: "); 
    scanf(" %s",u->dob); 

    printf("\n>ENTER EMAIL: "); 
    scanf(" %s",u->email); 

    printf("\n>ENTER GENDER(M/F): "); 
    scanf(" %c",&(u->gender)); 

    printf("\n>ENTER MOBILE NUMBER: "); 
    scanf("%d",&u->mobile_no); 

    while(flag==1) { 

    printf("\n>ENTER PASSWORD(ATLEAST 8 CHAR): "); 
    scanf("%s",u->password); 

    printf("\n>CONFIRM PASSWORD: "); 
    scanf("%s",c_pswd); 

    if(strcmp(u->password,c_pswd)!=0) 

    { 
     clrscr(); 

     printf("\t\tPASSWORDS DON'T MATCH ENTER AGAIN..."); 

     } 

    else { 

    clrscr(); 
    printf("\n\n\n\n\n\n\n\t\t\tSIGNUP SUCCESFUL!!!"); 

    printf("\n\n\nREDIRECTING TO LOGIN..."); 

    delay(5000);//time delay of 5 seconds 
    flag=0;//AGAIN GOES FOR PASSWORD INPUT AND VERIFICATION 

    } 
    } 
} 
+1

_compiler_는 아무 것도 건너 뛰지 않습니다. Te 컴파일러는 _executing_ 코드가 아닌 _generating_ 코드를 담당합니다. 무엇이라도 "건너 뛰는"것이 있으면, 그 코드는 _your code_ 일 것입니다. – Clifford

+0

규칙적으로'stdin' 스트림에서'fgets()'를 사용하십시오.()'. 'scanf()'문자열 -와 - 공백 문제에 대해서는 https://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using-scanf – Clifford

+0

을 참조하십시오. _calling_'signup()'처럼 보이십니까? 그것을 호출하기 전에 입력 버퍼의 상태는 무엇입니까? – Clifford

답변

1

그것은 주어진 정보에서 아마 명확하지 않다 이름 주석 처리 된 scanf() 호출은 작동하지만 콘솔 입력은 일반적으로 라인 버퍼링되며, 일부 선행 입력 처리가 버퍼링 된 데이터를 사용하지 않고 버퍼에 a가 들어 있으면 추가 입력을 기다리지 않고 버퍼링 된 라인을 입력으로 허용합니다. 사용자는 s<newline>를 입력 할 수 있습니다

menu_select = getchar() ; 
if(menu_select == 's') 
{ 
    signup(&user) ; 
} 

하지만 signup()에서, 첫 번째 입력 호출이 즉시 만족이 될 수 있도록 scanf()는, 버퍼에 단지 s이 (\n) 떠나 소모 : 예를 들어

당신이 있다면 빈 줄로.

이 문제를 처리하는 한 가지 패턴은 모든 입력이 전체 줄을 추출하도록하는 것입니다. 예를 들어 위의 경우 :

menu_select = getchar() ; 
while(menu_select != `\n` || getchar() != `\n) ; // empty flush loop 
if(menu_select == 's') 
{ 
    signup(&user) ; 
} 

고려하여 캡슐화 :

char inchar() 
{ 
    char ch ; 
    scanf("%c", &ch) ; 
    while(ch != `\n` || getchar() != `\n) ; // empty flush loop 
    return ch ; 
} 

문제는 scanf() 전체 라인을 처리하지 않는 입력 아니라 getchar() 발생뿐만 아니라 및 gets() 인 또는 scanf() 버전이 작동하는지 여부는 명확하지 않습니다.