2017-04-22 2 views
0

getdate 라이브러리 함수를 사용하여 시스템의 현재 날짜를 표시하는 프로그램을 작성하라는 요청을 받으면 getdate는 날짜 구조 * datep를 시스템의 현재 날짜로 채 웁니다. Turbo C++의 사전 정의 된 날짜 구조는 다음과 같습니다.터보 C++의 날짜 구조

struct date { 
int da_year; /*current year */ 
char da_day; /* day of the month */ 
char da_mon; /* month (1=Jan) */ 
}; 

함수 getdate는 아래와 같이 헤더 파일 DOS.H에 선언되어 있습니다. GETDATE이 시스템의 현재 날짜와 날짜 구조 *의 datep 채워 같이

void gatdate(struct date *datep); 

가 나는 형 구조체 일 구조 변수를 만들어 GETDATE 함수 호출과 같은 GETDATE하는 변수의 주소를 전달해야 실제 인수, 그 후에이 구조 변수의 값을 표시하면 시스템의 현재 날짜가 제공됩니다. 구조 날짜의 문자 변수 da_day는 시스템의 현재 날짜를 저장하는 멤버 중 하나입니다. 여기

  • 내 질문이 달의 ( 보통 1-28/30분의 29/31) 문자 변수에 일을 저장할 수 있습니다 어떻게?

  • 또한 구조 변수 값을
    아래에 인쇄해도 시스템의 현재 날짜가 올바르게 부여되지 않습니다.

    printf("year/day/month is %d/%c/%c",a.da_year,da_day,da_mon); /* a is the structure variable of the type struct date */ 
    

    아래 내용은 정확한 날짜입니다.

    printf("year/day/month is %d/%d/%d",a.da_year,da_day,da_mon); 
    

    왜 그렇습니까? 여기

+0

C++를 사용하는 경우이 태그에 C++로 태그를 지정하십시오. Not C –

+0

** TurboC++는 * 2017 ***에 사용하지 마십시오. 일부 [C++ 11] (https://en.wikipedia.org/wiki/C%2B%2B11)에 부합하는 자유 소프트웨어 컴파일러 (예 : 최신 [GCC] (http://gcc.gnu.org/) 또는 [Clang] (http://clang.llvm.org/) ...). TurboC++는 오래된 습관 (그리고 오늘날 배울 가치가없는 C++의 쓸모없는 버전)을 가르쳐 줄 것입니다. –

+0

BTW, C++에서'printf'가 아니라 [stream] (http://en.cppreference.com/w/cpp/io/basic_ostream) 출력을 사용하는 것이 더 좋을 것입니다. –

답변

2

내 질문은 어떻게 문자 변수의 달 (보통 1-28/30분의 29/31) 일을 저장할 수 있습니까? 부호 또는 부호

char 변수는 쉽게 일자로 사용될 (현학적으로, 소수 값)로 310 사이의 범위의 「값」을 길게 할 수있다.

또한 아래의 방법이없는 구조 변수의 값을 올바르게 인쇄 시스템의 현재 날짜를 준다. 당신이 진수 값을 인쇄하지 않기 때문에

예, 당신은 기대하지 않는 해당 문자 표현을 인쇄하려고하고 있습니다. 우리는 여기서 십진수 값에만 관심이 있으므로 %d이 예상되는 변환 지정자가됩니다.


printf() 같은 가변 기능, 정교한하려면 지정된 인수는 %d 변환 지정을위한 완벽한 적합 int으로 승진 할 수있는 공급 char하게 기본 인수 추진 참고을 받다. C11, 장 §7.21.6.1을 인용 또한 관련

,

d,i

int 인수 스타일 로그인 진수로 변환됩니다

은 [-]을 DDDD. [...] 더 l 길이 개질제가 존재하지

c

경우 int 인수는 unsigned char로 변환되고, 생성 된 문자가 기록된다. [...]


참고

C11을 인용 제 §6.5.2.2

[...]은 함수 원형 선언자 원인의 생략 표기 마지막으로 선언 된 매개 변수 다음에 인수 유형 변환이 중지됩니다. 기본 인수 프로모션은 후행 인수에서 수행됩니다.

+0

'char 'printf'와 같은 변수 함수라면, 어쨌든 암묵적으로'int'로 변환됩니다 (표준의 "default argument promotion"참조). 그래서'% d'는 이중적으로 적합합니다. 사실,'% c'는 정확하게 이런 이유로 정확히 항상 오류입니다. –

+0

@CodyGray 사실, 우리는'% hhd' 또는'% hhu'와'char'을위한 다른 것들을 가지고 있습니다. :) 나는 그것을 추가 할 것이다. –

+0

우리는 현대의 C++ 컴파일러에서하지만 터보 C++에 다시 존재했는지 기억할 수 없습니다. (아마 내가 너무 젊어 터보 C++을 실제로 사용하지 않았기 때문일 것입니다.) –