C의 stdio에서 int를 받으려면 어떻게 해야 합니까?
나는 이 일에 상당한 곤란을 겪고 있습니다.
printf("> ");
int x = getchar();
printf("got the number: %d", scanf("%d", &x));
산출량
> 1234
got the number: 1
이것이 당신이 찾고 있는 것인지 완전히 확신할 수는 없지만, 만약 당신의 질문이 다음을 사용하여 정수를 읽는 방법이라면.<stdio.h>
, 그럼 적절한 구문은
int myInt;
scanf("%d", &myInt);
물론 이것이 올바르게 작동하는지 확인하기 위해 많은 오류 처리를 해야 하지만, 이것은 좋은 시작이 될 것입니다.특히, 당신은 그 사건들을 처리할 필요가 있을 것입니다.
- 그
stdin
파일이 닫히거나 깨져서 아무것도 얻을 수 없습니다. - 사용자가 잘못된 내용을 입력했습니다.
이를 확인하기 위해서는 반환 코드를 캡처할 수 있습니다.scanf
다음과 같이:
int result = scanf("%d", &myInt);
한다면stdin
읽는 동안 오류가 발생합니다.result
될 것이다EOF
, 다음과 같은 오류를 확인할 수 있습니다.
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
반면 사용자가 가비지 텍스트 문자열과 같은 잘못된 것을 입력할 경우 다음 중에서 문자를 읽어내야 합니다.stdin
당신이 모든 기분 나쁜 입력을 소비할 때까지.당신은 다음과 같이 할 수 있습니다.scanf
아무것도 읽지 않은 경우 0을 반환합니다.
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
if (result == 0) {
while (fgetc(stdin) != '\n') // Read until a newline is found
;
}
도움이 되길 바랍니다!
EDIT : 좀 더 자세한 질문에 대한 답변은 다음과 같습니다. :-)
이 코드의 문제는 당신이 글을 쓸 때
printf("got the number: %d", scanf("%d", &x));
이것은 반품코드를 출력하는 것입니다.scanf
,어느 것이EOF
스트림 오류로,0
아무 것도 읽히지 않는다면, 그리고1
그렇지않으면.이것은 특히 정수를 입력하면 항상 인쇄된다는 것을 의미합니다.1
당신이 그 상태 코드를 인쇄하고 있기 때문에scanf
, 당신이 읽은 숫자가 아닙니다.
수정하려면 다음으로 변경합니다.
int x;
scanf("%d", &x);
/* ... error checking as above ... */
printf("got the number: %d", x);
도움이 되길 바랍니다!
대표적인 방법은scanf
:
int input_value;
scanf("%d", &input_value);
그러나 대부분의 경우 입력을 읽으려는 시도가 성공했는지 여부를 확인하려고 합니다.scanf
를 성공적으로 변환한 항목 수를 반환하므로 일반적으로 반환 값을 예상되는 항목 수와 비교하려고 합니다.이 경우 한 항목을 읽을 것으로 예상되므로 다음과 같습니다.
if (scanf("%d", &input_value) == 1)
// it succeeded
else
// it failed
물론, 모든 것에 대해서도 마찬가지입니다.scanf
가족()sscanf
,fscanf
등).
해결책은 아주 간단합니다...입력 버퍼의 첫 번째 문자를 주는 getchar ()를 읽고 있는데 scanf가 정수로 구문 분석했습니다(정말 이유를 알 수 없습니다). getchar를 잠시 잊으면 새 줄 문자가 나올 때까지 전체 버퍼를 읽습니다.
printf("> ");
int x;
scanf("%d", &x);
printf("got the number: %d", x);
산출물
> [prompt expecting input, lets write:] 1234 [Enter]
got the number: 1234
언급URL : https://stackoverflow.com/questions/5087062/how-can-i-get-an-int-from-stdio-in-c
'bestsource' 카테고리의 다른 글
플러그인 업데이트 시 워드프레스 플러그인에 대한 변경사항이 손실되지 않도록 하는 방법? (0) | 2023.10.21 |
---|---|
Ubuntu 14.04에 mysqldump 설치 (0) | 2023.10.21 |
IMT2000 3GPP - iOS에서의 NSURL 접속 및 기본 HTTP 인증 (0) | 2023.10.21 |
Git - 로컬에서 일부 파일을 삭제했습니다. 원격 저장소에서 파일을 가져오려면 어떻게 해야 합니까? (0) | 2023.10.21 |
워드프레스 커스텀 필드 입력 텍스트를 qTranslate X로 번역 가능하게 만드는 방법은? (0) | 2023.10.21 |