2013-10-24 8 views
1

고등학교 때 제 지식이었습니다."scanf"를 사용하여 특정 문자를 입력하는 방법은 무엇입니까?

대문자를 제외한 모든 문자를 입력 할 수 있습니다.

하지만 입력 만 할 수있는 문자 [A-F]를 받으려면 어떻게해야합니까? 내 의미에서

는이 같이 작성해야합니다 : 당신이 정규식을 사용하여 같은

scanf("%[A-Z]s", input); 

그것은 보이지만 어쨌든 그것은 내가 그것을 실행할 때, 그래서 작업

was't

$./a.out 
asdfasdfABC 
`[]@ 

[] 일부 외계인 문자이지만 입력 할 수 없습니다. 이 경우

+0

당신이 그냥, 예를 들어, 같은 봤어 같은 것을 할 필요가 ' "% [A-Z]"'? –

+0

나는 이미 시험해 보았다. 그러나 산출에는 약간 외국 편지가있다. – KKKKK

+1

실제로 문제를 나타내는 코드와 "외계인의 편지"를 보여줍니다. – abelenky

답변

1

단순히

scanf("%[A-F]s", input); 

지금 입력 F.

+0

'scanf ("% [A-F] s", 입력)'는 입력이'Fs'이면's'를 먹습니다. 입력이'Fa'이면,'a'는 그대로 남습니다. 's'는 scsetet 변환 명세의 일부가 아닙니다. 여러분은 하나의 변환 명세에서'% s' 또는'% [...]'를 사용하지만 둘 다 사용할 수는 없습니다. –

1

문제는 당신이 오류를 검사하지 않는 것이, 대부분이며, A에서 오직 수행하는 것처럼 코드를 작성하고 있습니다 scanf 호출이 실패한 경우에도 문자열을 인쇄하십시오.

패턴이 "%[A-Z]" 인 경우 대문자 만 스캔하고 입력 한 문자열이 대문자 인 scan으로 시작하지 않으면 실패합니다. 물론 이것은 문자열 input이 결코 채워지지 않을 것이고 그 다음에 인쇄 할 임의의 데이터를 포함한다는 것을 의미합니다.

this reference. 이 함수는 성공적으로 스캔 한 항목의 수를 반환 할 것이라고 알려줄 것입니다. 귀하의 경우에는 1이어야합니다. 코드에서 scanf 함수가 1을 반환하지 않으면 문제가있는 것입니다.

그래서 당신은

if (scanf(...) == 1) 
    printf(...); 
else 
    printf("Something went wrong when reading input\n"); 
관련 문제