• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

원하는 값이 안 나옵니다.

21.04.28 21:48 작성 조회수 141

0

long get_long(void);

int main()

{

long num1;

while (1)

{

printf("Input an integer 1 between 100.\n");

num1 = get_long();

if (num1 > 1 && num1 < 100)

{

printf("okay!");

break;

}

else

printf("try again!");

}

return 0;

}

long get_long(void)

{

long num;

char c;

printf("Input an integer and press enter.\n");

while (scanf("%ld", &num) != 1)

{

printf("your input (");

while ((c = getchar()) != '\n')

putchar(c);

printf(") is not an integer.\n");

}

printf("your input (%ld) is correct!", num);

}

제가 이렇게 작성을 했는데요 

숫자가 저 범위에 해당하지 않는 것을 넣어도 

if (num1 > 1 && num1 < 100)을 수행하길래 디버그를 해봤는데요

제가 처음에 10000을 입력했는데  이게 함수 get_long를 거쳐서 

num1이 34가 됐는데 왜  이렇게 된 걸까요?

뭐가 잘못된 걸까요?

답변 2

·

답변을 작성해보세요.

2

도와드리기 어려운 형태로 질문을 하셨는데 해결하셨다니 다행입니다.

다만, 반환 자료형이 없는 함수로부터 억지로 반환값을 받으려고 하면 컴파일 오류가 발생했을텐데 그게 좀 이상하네요. 초보때는 뭔가 정신이 없지만, 컴파일러는 알아 듣기 힘든 메시지를 던져줄 지언정 거짓말을 하지는 않습니다. 차분히 다시 검토해보시는 것이 좋겠습니다.

(파이썬에서는 반환값이 없으면 강제로 null을 넣어줘서 디버깅이 힘든 경우가 있었던 것으로 기억합니다. C/C++은 엄격하기 때문에 이런 점은 없습니다.)

1

haon님의 프로필

haon

2021.04.29

else문, get_long함수의 2번째while문에서 왜 중괄호{}를 안쓰는지 궁금하긴 하지만 오류는 찾았습니다. 

9줄의 num1 = get_long();는 get_long함수를 부르고 반환값을 num1안에 대입해야하는데 반환값이 없습니다. (오류가 나면 차라리좋을텐데...) 참고로 반환값이없는함수를 불러오면 null이 들어있을줄알았는데 0이 들어있었습니다.

#include <stdio.h>
long get_long(void);
int main()
{
	long num1;
	while (1)
	{
		printf("Input an integer 1 between 100.\n");
		num1 = get_long();
		if (num1 > 1 && num1 < 100)
		{
			printf("okay!");
			break;
		}
		else
			printf("try again!");
	}
	return 0;
}
long get_long(void)
{
	long num;
	char c;
	printf("Input an integer and press enter.\n");
	while (scanf("%ld", &num) != 1)
	{
		printf("your input (");
		while ((c = getchar()) != '\n')
			putchar(c);
		printf(") is not an integer.\n");
	}
	printf("your input (%ld) is correct!", num);
	return num;
}
qpalz님의 프로필

qpalz

질문자

2021.05.01

감사합니다.