프로그래밍 언어/C

C26451번 오류 해결

happy_life 2021. 9. 30. 10:55

문제상황

 

#include <stdio.h>
#include <math.h>
int main() {
	int T;
	scanf("%d", &T);
	int x, y, n; //n은 거리
	int a;
	for (int i = 0; i < T; i++)
	{
		scanf("%d %d", &x, &y);
		n = y - x;//45 50 이든 0 5이든 공간 이동 장치 작동 횟수
				  //차이 없음 

		a = (int)sqrt(n);
		printf("a =%d", a);
		if ((n) == a * a)
		{
			printf("%d\n", 2 * a - 1);
		}
	}
	return 0;
}

4를 입력받아 제곱근을 구하려고

하였으나, 오류와 함께 값이 입력되지 않음.

4의 제곱근 2가 도출되어야하는데 이런식으로 나옴.

 

대충 자료형 문제 인듯.

 

원인

sqrt함수는 인수로 int형을 받지 않기 때문에 error가 발생한 것.

 

 

해결과정

 

 

제곱근을 받는 함수는 정수형 입력을 받지 않는다.

즉,x,y,n은 모두 실수형이어야 함.

따라서 코드를 다음과 같이 수정하였습니다.

#include <stdio.h>
#include <math.h>
int main() {
	int T;
	scanf("%d", &T);
	double x, y, n; //n은 거리
	int a;
	for (int i = 0; i < T; i++)
	{
		scanf("%lf %lf", &x, &y);
		printf("y = %lf\n", y);
		printf("x = %lf\n", x);
		n = y - x;//45 50 이든 0 5이든 공간 이동 장치 작동 횟수
				  //차이 없음 
		printf("n = %lf\n", n);
		a = (int)sqrt(n);
		printf("a = %d\n", a);

		if ((int)(n) == a * a)
		{
			printf("%d\n", 2 * a - 1);
		}
	}
	return 0;
}

올바르게 출력된 것을 알 수 있습니다.

 

배운점

1)sqrt 함수는 실수형만을 인수로 갖는다.

2)double형은 scanf받을 때 %f로 받으면 에러난다. double은 printf, scanf 모두 %lf 형식지정자를 이용하자.