2017-10-21 98 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编译器负责_generating_代码不为_executing_它 - 如果有什么“跳过”任何东西,那么它是_your code_这样做, – Clifford

+0

通常在'stdin'流中使用'fgets()',而不是那些可怕的不安全的''get ()'。对于'scanf()'带空格的字符串问题,请参阅https://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using-scanf – Clifford

+0

代码是什么_calling_'注册()'看起来像?在调用之前输入缓冲区的状态是什么? – Clifford

回答

1

这也许并不清楚,从所给的信息为什么gets()失败而注释掉scanf()调用工作,但是控制台输入通常是行缓冲的,并且如果某个前面的输入处理没有使用缓冲数据并且缓冲区包含a,那么该缓冲行将被接受为输入而无需等待进一步输入。

对于例如,如果您有:

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

用户可以输入s<newline>scanf()在缓冲区中仅消耗了s离开(\n),使signup(),第一输入呼叫立即满足作为一个空行。

处理此问题的一种模式是确保所有输入都提取整行。在例如上述的情况下:

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 ; 
} 

与不处理整个线路的任何输入,而不仅仅是getchar()将出现问题,而且也scanf()gets()这是目前尚不清楚您的scanf()版本是否或如何工作。

相关问题