bestsource

C의 stdio에서 int를 받으려면 어떻게 해야 합니까?

bestsource 2023. 10. 21. 10:35
반응형

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);

물론 이것이 올바르게 작동하는지 확인하기 위해 많은 오류 처리를 해야 하지만, 이것은 좋은 시작이 될 것입니다.특히, 당신은 그 사건들을 처리할 필요가 있을 것입니다.

  1. stdin파일이 닫히거나 깨져서 아무것도 얻을 수 없습니다.
  2. 사용자가 잘못된 내용을 입력했습니다.

이를 확인하기 위해서는 반환 코드를 캡처할 수 있습니다.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

반응형