2017-02-22 1 views
1

sscanf()을 사용하여 문자열의 형식을 검사 해 보았습니다. 형식을 잘못 지정하지 않아도 오류를 인쇄하지 않습니다. 나는 그것이 무엇이 잘못되었는지를 모른다.사용자 입력 문자열이 "% d/% d/% d/% d/% d"형식인지 확인하십시오. C

char  *now = 1; // assume this is the user-entered string 
int   year,month,hour,min,sec; 

//CHECKING IF THE ARGUMENT IS CORRECT OR NOT 
if (sscanf(now,"%d/%d/%d/%d/%d\n",&year,&month,&hour,&min,&sec) == 0) 
    { 
     fprintf(stderr,"\x1b[1;31mMust specify correct format\nExiting........\x1b[0m\n"); 
     _exit(1); 
    } 
+1

나는'char * now = 1'이 무엇을 기대하는지 잘 모르겠습니다. 포인터를 1로 초기화하려고합니까? – ryyker

+0

... 또는 마지막 댓글에 피기 백킹, _ [this sscanf documentation] (https://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm) _에 따라 'EOF'를 확인하십시오. – ryyker

+0

@ryyker 예. char * now = 2000/300/2라고 가정합니다. % d/% d/% d/% d/% d 형식이 아니기 때문에 오류가 발생합니다. –

답변

1

sscanf 성공적으로 스캔 및 할당 필드 (또는 오류의 경우 EOF)의 수를 반환합니다. %d 중 아무 것도 성공하지 못했는지, 즉 문자열에서 숫자가 파싱되지 않았는지 확인하고 있습니다. 즉, 하나의 정수를 파싱 할 수 있더라도 if은 실행되지 않습니다. 그래서 하나 개의 번호가 해석 할 수 없었던 심지어 if 실행

if (sscanf(now, "%d/%d/%d/%d/%d", &year, &month, &hour, &min, &sec) != 5) 

if (sscanf(now,"%d/%d/%d/%d/%d\n",&year,&month,&hour,&min,&sec) == 0) 

을 변경합니다. \n은 실제로 여기에 아무런 영향을주지 않기 때문에 제거했습니다.