문제

"Point %D %D"와 같은 형식과 선을 일치 시키려고합니다. 따라서이 두 정수 만 두 번만하면 "포인트"는 형식으로 하드 코딩됩니다. Scanf의 Linux Man 페이지를 읽는 것을 이해하면 올바르게 작동해야합니다.

다음 코드 인 내가 사용하고 싶은 방법, Scanf 로의 첫 번째 호출은 작동하지만 다음 호출은 오류 코드로 Scanf를 반환하고 stdin에서 더 많은 숫자를 가져 오지 않습니다 (Scanf는 stdin에서 더 많은 입력을 기다리는 것을 차단하지 않습니다.

for (;;)
{
    scanf("point %d %d", &x, &y);
    printf("=> point %d %d\n", x, y);
}

이런 식으로 모든 것이 예상대로 작동합니다.

    int x, y;
    char s[10];

    for (;;)
    {
        scanf("%s %d %d", s, &x, &y);
        printf("=> point %d %d\n", x, y);
    }

내가 무엇을 오해 할 수 있는지에 대한 제안이 있습니까?

감사.

도움이 되었습니까?

해결책

종료 문자와 같은 아직없는 데이터가 있습니다. stdin 그것은 다가오는 스캔이 일치하지 않고 멈출 수 있습니다. 두 번째 버전에서는이 종단 데이터가 %s.

나는 너에게 제안한다 fgets 먼저 버퍼에 sscanf 그것. 그리고 반환 값을 확인하십시오.

다른 팁

제 생각에는 적절한 입력을하지 않는 것입니다. 예를 들어이 입력은 작동하지 않습니다.

4 5

이것은 작동해야합니다 :

point 4 5

오류 코드를 언급하지는 않았지만 형식을 올바르게 따르지 않았을 것입니다 (예 : 숫자 앞에 포인트를 넣습니다).

좋은 프로그래밍 실습으로서 사용자로부터 입력을 취하기 전에 표준 입력을 플러시해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top