programing

scanf 형식 지정자의 별표는 무엇을 의미합니까?

starjava 2023. 10. 24. 20:04
반응형

scanf 형식 지정자의 별표는 무엇을 의미합니까?

그래서 우연히 이 코드를 발견했는데 그 코드의 목적이 무엇인지, 어떻게 작동하는지 알 수 없었습니다.

int word_count;
scanf("%d%*c", &word_count);

제가 처음 생각한 것은%*dA를 참조하고 있었습니다.char포인터 또는 허용 안 함word_count복용으로 인하여char변수들.

누가 이것에 대해 좀 설명해 주실 수 있습니까?

*c예를 들어 입력 "30a"의 경우 문자가 읽히지만 할당되지 않음을 의미합니다.word_count, 하지만 'a'는 무시됩니다.

*인에"%*c"의 약자assignment-suppressing character *: 이 옵션이 있으면 함수는 변환 결과를 수신 인수에 할당하지 않습니다.1따라서 문자는 읽히지만 어떤 변수에도 할당되지 않습니다.


각주:

1. fscanf

인용하자면C11표준, 챕터 §7.21.6.2, fscanf

[...] 각 변환 사양은 문자에 의해 소개됩니다.%. % 다음에는 다음과 같은 순서로 나타납니다.

— 선택적 과제 억제 문자*.
— [...]
변환 지정자 문자

행동에 관해서는

[..] 할당 억제가 A에 의해 지시되지 않는 한*, 변환 결과는 변환 결과를 아직 수신하지 않은 형식 인수 뒤에 첫 번째 인수가 가리키는 개체에 배치됩니다. [...]

즉, 다음과 같은 형식 지정자의 경우에는"%*c",achar로부터 읽힐 것입니다.stdin스캔된 값은 저장되거나 어떤 것에도 할당되지 않습니다.따라서 해당 파라미터를 제공할 필요가 없습니다.

그럼, 이 경우엔

scanf("%d%*c", &word_count);

완벽하게 유효한 진술입니다.

예를 들어 *nix 환경에서는 입력 버퍼를 삭제합니다.newline입력 후 키 누름으로 인해 저장됩니다.

언급URL : https://stackoverflow.com/questions/34874347/what-does-an-asterisk-in-a-scanf-format-specifier-mean

반응형