C 언어 학습 노트——scanf(%[^n]%c)

C 언어 학습 노트——scanf(%[^n]%c)

scanf 및 형식 지정자

参考【scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s - cppreference.com】

우리가 이해해야 할 것은 [%*[^\n]% c]입니다 . 이제 이를 [% [^\n]] [%*c] 두 부분 으로 나눕니다 .

각 변환 지정자 일치는 백분율 기호[%]로 시작됩니다.

% 뒤의 별표 [*]는 [할당 억제 문자]를 의미하며, 이는 scanf 함수의 일치 결과를 받아들이는 데 매개 변수가 필요하지 않음을 의미합니다.

예를 들어:

#include <stdio.h>

int main(void)
{
    
    
    int number = 0;

    printf("input a number: ");
    scanf("%d", &number);

    printf("number is [%d]\n", number);

    return 0;
}

사용자는 번호를 입력하고 이를 변수 번호에 할당해야 합니다.
실행 결과는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

% 뒤에 *를 추가하여 %*d가 되면 숫자에 할당되지 않습니다.

#include <stdio.h>

int main(void)
{
    
    
    int number = 0;

    printf("input a number: ");
    scanf("%*d", &number);  // add *

    printf("number is [%d]\n", number);

    return 0;
}

실행 결과는 다음과 같습니다.

여기에 이미지 설명을 삽입하세요.사용자가 입력한 번호는 변수 번호에 할당할 수 없음을 알 수 있습니다. [% c]는 문자와 일치하지만(%c는 일치하는 문자임) 변수에 할당하지 않음을 의미합니다. 그렇다면 [% [^\n]]은 무슨 뜻인가요 ? \n은 개행 문자입니다. 대괄호 [ ]는 집합을 나타냅니다. 예, 고등학교 수학 첫 수업의 집합입니다. 집합의 첫 번째 문자가 ^이면 집합에 없는 문자와 일치합니다. (고등학교에서 배운 보완 세트) 세트의 내용은 다음과 같은 범위일 수도 있습니다: [1-9], [az]

#include <stdio.h>

int main(void)
{
    
    
    char str[100];

    printf("input a number: ");
    scanf("%[a-zA-Z]", str);

    printf("[%s]\n", str);

    return 0;
}

실행 결과는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

요약하면 [%*[^\n]]은 개행 문자 앞의 모든 문자와 일치하지만 값을 할당하지는 않습니다.

% 뒤에 숫자를 추가하여 일치하는 문자 수를 나타낼 수도 있습니다.

#include <stdio.h>

int main(void)
{
    
    
    char str[100];

    printf("input a number: ");
    scanf("%5[a-zA-Z]", str); // note 5

    printf("[%s]\n", str);

    return 0;
}

실행 결과는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

5자만 일치함

%*[^\n]이 문자와 일치할 수 없으면 다음 %*c도 일치하지 않습니다. 그러므로 우리는 개행 문자를 흡수하고 이 두 문장을 분리해야 합니다.

scanf("%*[^\n]");
scanf("%*c");

요약하다:

와일드카드 문자 % [^\n]은 개행 문자까지 모든 문자를 건너뛰는 것을 의미합니다.
^for (i=0;i<2;i++) fscanf(fin,"%
[^\n]% c"); 2줄을 건너뜁니다.
%는
"건너뛰기"[^\n]를 의미합니다 . 문자열 구분 기호는 "\n"입니다. \n 앞의 모든 문자열을 건너뛰려면
대괄호 %*[^\n] 안에 구분 기호 테이블을 작성할 수 있습니다 . %*c는 줄 끝을 "건너뛰는" 개행 문자입니다.

수정일: 2022년 12월 8일

추천

출처blog.csdn.net/weixin_49796643/article/details/128241206