문제
"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
오류 코드를 언급하지는 않았지만 형식을 올바르게 따르지 않았을 것입니다 (예 : 숫자 앞에 포인트를 넣습니다).
좋은 프로그래밍 실습으로서 사용자로부터 입력을 취하기 전에 표준 입력을 플러시해야합니다.
제휴하지 않습니다 StackOverflow