scanf() 형식 문자열에서 후행 공백의 영향은 무엇입니까?
사이에 무엇이 다릅니까?scanf("%d")
그리고.scanf("%d ")
이 코드에서 형식 문자열의 후행 공백은 어디에 있습니까?
#include <stdio.h>
int main(void)
{
int i, j;
printf("enter a value for j ");
scanf("%d ",&j);
printf("j is %d\n", j);
printf("enter a value for i ");
scanf("%d", &i);
printf("i is %d\n", i);
return 0;
}
?scanf()
함는형지정뒤자에공백작추다와 같은 합니다.scanf("%d ", &j);
?
검색 형식의 공백 문자를 사용하면 최대한 많은 공백 문자를 명시적으로 읽고 무시할 수 있습니다. 래서로.scanf("%d ", ...
숫자를 읽은 후에는 계속 문자를 읽으며 입력에 공백이 아닌 문자가 표시될 때까지 모든 공백을 삭제합니다.공백이 아닌 문자는 입력 기능으로 읽을 다음 문자로 남아 있습니다.
코드 사용:
printf("enter a value for j ");
scanf("%d ",&j);
printf("j is %d \n", j);
첫 번째 줄을 인쇄한 다음 사용자가 번호를 입력할 때까지 기다린 다음 번호 뒤에 계속 무언가를 기다립니다.따라서 입력하기만 하면 걸려 있는 것처럼 보입니다. 계속하려면 공백이 아닌 문자가 있는 다른 줄에 입력해야 합니다.를 입력하면 다음 값이 됩니다.i
화면이 다음과 같이 표시됩니다.
enter a value for j 5
6
j is 5
enter a value for i i is 6
또한 대부분의 스캔프 %-변환은 선행 공백도 건너뜁니다(다음을 제외한 모든 항목).%c
,%[
그리고.%n
), %-제곱 앞의 공백은 관련이 없습니다("%d"
그리고." %d"
동일하게 행동할 것).따라서 대부분의 경우 고유한 효과를 위해 스캔 변환이 특별히 필요하다는 것을 알지 못하는 한 스캔 변환에서 공백이 발생하지 않도록 해야 합니다.
형식 문자열의 공백 문자(공백, 줄 바꿈, 수평 및 수직 탭)는 입력에 있는 임의의 수의 공백 문자와 일치합니다.
번째 에는 당의첫번경우에째신에▁in경우▁your.
scanf("%d ",&j);
화이트 스페이스 문자(WSC)와 마주칠 때' '
그러면 다음을 포함하여 사용자가 입력한 모든 흰색 공간을 먹어 치울 것입니다.\n
를 누르면 WSC가 아닌 다른 WSC로 들어갑니다. 이 경우 +를 누르면 프로그램이 종료됩니다.
의 공백 scanf
은 ▁by에 된 대로 합니다.isspace
따라서 테일링 공간, 새 줄, 탭 문자 또는 기타 공백 문자가 있는 경우 다음과 같이 사용됩니다.scanf
돌아오기 전에
차이(명백하지만)는 다른 형식 문자열입니다.다음 행을 입력하는 경우:
"3 "
scanf()
성공적으로 돌아갑니다.그렇지 않으면 제공된 입력에 따라 다릅니다.scanf()
기본적으로 공백(숫자, 공백, 줄 바꿈)을 건너뛰고 입력 스트림에서 영숫자 값을 검색합니다.이것은 공백의 뒤를 따르는 것이기 때문에, 누를 때 입력의 끝에 있는 줄바꿈 문자와 함께 묶이기 때문에 거의 결과가 없습니다.
scanf()
에서는 연속되는 공백 문자가 단일 공백 문자로 압축된다는 점을 제외하고는 입력된 입력이 사용자가 입력한 형식 문자열과 정확하게 일치할 것으로 예상합니다.은 큰 큰 문 열 의 등 처 로 구 분 면 중 합 요 려 매 우 하 석 문 물 가 리 문 자 를 데 터 이 ▁this 니 ▁with 다 합 ▁if ▁large ▁you ▁strings ▁very ▁becomes ▁of 요 ▁important - ent 중 이 , ▁itsscanf()
.
이를 추가로 테스트하기 위한 좋은 연습은 다음과 같습니다.
#include<stdio.h>
int main(void)
{
int a=0,b=0,c=0;
printf("Enter values for A, B, C, in the format: \"A B - C\"\n");
scanf("%d %d - %d", &a, &b, &c);
printf("Values: A:%d, B:%d, C:%d\n", a, b, c);
}
그런 다음 올바른 형식과 잘못된 형식의 콘솔 입력(즉, 공백 및 하이픈)을 모두 제공한 후 이 정수의 값이 얼마인지 확인합니다.다음은 몇 가지 런 예제입니다.첫 번째 사용된 잘못된 입력, 두 번째 사용된 올바른 형식의 입력입니다.첫 번째 경우에는C
안 도 돼있 요어안요▁doesn있어.scanf()
입력 문자열과 형식 문자열이 일치하지 않으면 예기치 않은 동작을 제공합니다.일반적으로, 당신은 다음과 같은 것을 사용하는 것이 더 낫습니다.fgets()
기능등)을을 구문 분석합니다. 입니다.scanf()
사용자가 실수하거나 의도적으로 실수하지 않을 것이라고 가정합니다.
Enter values for A, B, C, in the format: "A B - C"
1 2 3
Values: A:1, B:2, C:0
Enter values for A, B, C, in the format: "A B - C"
1 2 - 3
Values: A:1, B:2, C:3
이제 마지막 실행을 살펴보겠습니다.은 그것을 될 입니다.scanf()
에서는 여러 개의 연속 공백 문자를 하나의 문자로 압축하므로 이러한 최종 실행이 실제로 성공하는 이유는 다음과 같습니다.
Enter values for A, B, C, in the format: "A B - C"
1 2 - 3
Values: A:1, B:2, C:3
Enter values for A, B, C, in the format: "A B - C"
1 2 - 3
Values: A:1, B:2, C:3
언급URL : https://stackoverflow.com/questions/19499060/what-is-the-effect-of-trailing-white-space-in-a-scanf-format-string
'programing' 카테고리의 다른 글
Springbean에서 새로운 거래를 시작하고 있습니다. (0) | 2023.08.09 |
---|---|
NodeJS를 통해 엔드포인트로 Ajax 요청을 작성하는 방법 (0) | 2023.08.09 |
십진수를 분수로 변환하는 방법은 무엇입니까? (0) | 2023.08.09 |
구글은 폴리곤으로 v3 API 마우스를 매핑합니까? (0) | 2023.08.09 |
이메일 주소의 유효성을 확인하려면 어떻게 해야 합니까? (0) | 2023.08.04 |