2014-12-30 2 views
0

C 프로그램에서 구조체의 문자 배열에 넣을 날짜를 사용자에게 쿼리하려고합니다 (pIndex-> ​​startDate). 날짜가 오늘 날짜이면 사용자는 enter를 눌러야합니다. 다른 날짜 인 경우 사용자는 입력해야합니다.사용자로부터의 쿼리 날짜, 사용자가 Enter 키를 입력하면 오늘 날짜 사용

입력은 fgets로 수행됩니다. 내가 생각하기에 사용자 입력이 '\ n'과 같은지 확인해 보겠습니다.이 경우 배열을 오늘 날짜와 동일하게 설정합니다. 그렇지 않으면 배열은 사용자가 입력 한 것과 동일합니다.

날짜를 (일반적으로) 내가 사용하는 찾으려면 :

time_t now = time(NULL); 
struct tm *t = localtime(&now); 

가 .. 그리고 나는 경우 문을위한 임시 문자 배열이 : 나는 시도

char temp_date[11]="2014-01-01"; //initialized with something, guess there is a better solution 

을 다음 :

printf("Enter start date (press Enter for todays date) > "); 
    fgets(pIndex->startDate, MAXDATE, stdin); 
     if (pIndex->startDate=='\n'){ 
     sprintf (temp_date, "%d-%02d-%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday); 
      (pIndex->startDate)==temp_date; 
     } 
/*Check the result*/ 
    printf("CHECK TEMP_DATE: %s\n> ",temp_date); 
    system("pause"); 

그러나 출력에 나타나는 유일한 값은 char temp_date가 다음과 같이 초기화 된 값입니다. 2014-01-01

이 방법이 잘못 되었습니까? 누구든지 더 나은 (일하는) 방법을 알고 있습니까?

+0

사용하여 입력 '\n' 시작인가? –

+0

아마도 if (pIndex-> ​​startDate == '\ n')'대신에'if (pIndex-> ​​startDate [0] == '\ n')'를 원했을 것입니다. 또한 iharob가 그의 코멘트에서 지적한 라인에서 과제 대신에 비교 작업을 수행하고 있습니다. –

+0

@CoolGuy pIndex-> ​​startDate [0]가 실제로 해결책이었습니다. 감사. – Espen

답변

0

fgets()에 대한 호출이

size_t length; 

printf("Enter start date (press Enter for todays date) > "); 
fgets(pIndex->startDate, MAXDATE, stdin); 
/* this is wrong */ 
// if (pIndex->startDate=='\n'){ 
length = strlen(pIndex->startDate); 
if ((length == 1) && (pIndex->startDate[length - 1] == '\n')) { 
    sprintf(temp_date, "%d-%02d-%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday); 
    strcpy(pIndex->startDate, temp_date); 
} 
/*Check the result*/ 
printf("CHECK TEMP_DATE: %s\n> ",temp_date); 
system("pause"); 
+0

'(pIndex-> ​​startDate [0] == '\ n') {'면 충분하다. – chux

0

문제로 봅니다. 대상이 잘못된 유형입니다. "2014-01-01"을 읽는 데 필요한 버퍼 크기는 확실히 개행 '\n'과 null 문자 '\0' 또는 적어도을 포함합니다. fgets()의 결과를 확인하는 것도 좋습니다. `; 확인하기

// Problem code 
// MAXDATE is 11, startDate is a char 
#define MAXDATE 11 
struct { 
    char startDate; 
} *pIndex; 
... 
fgets(pIndex->startDate, MAXDATE, stdin); 

// Recommend 
#define MAXDATE 11 
struct { 
    char startDate[MAXDATE + 1]; 
} *pIndex; 
... 
if (fgets(pIndex->startDate, MAXDATE, stdin) == NULL) Handle_EOF(); 

이`(pIndex->의 startDate) == temp_date을 무엇

if (pIndex->startDate[0] == '\n') {