peellove3   4년 전

#include

int main()
{
int A,B;
A,B<10||A,B>0;
scanf("%d %d\n", &A, &B);
while(A+B!=0)
printf("%d\n", A+B);

return 0;
}

2줄 이상의 입력값을 대입하면 렉이걸리면서 멈춥니다...

그리고 EOF 가 뭔지 설명해주시면 감사하겠습니다 ㅎㅎ

dyk777   4년 전

0) 올리신 코드가 어디선가 깨졌나봅니다. #include<stdio.h>나 들여쓰기가 모두 날아가버렸군요.

1) 6번 줄의 의도는 무엇인가요.

    1-1) c언어에서는 여러 변수를 한번에 평가하는 방법은 아예 존재하지 않습니다. ((A<10 && B<10) || (A>0 && B>0)) 과 같이 모든 개별 변수에 대해 식을 평가해줘야 합니다.

    1-2) A,B가 모두 0보다 크고 동시에 10보다 작으므로, ||가 아니라 &&를 써야 합니다.

    1-3) < > == 등의 비교 연산자와 || &&등의 논리 연산자를 사용하여 논리값을 구했다 칩시다. 이 코드는 이 값을 이용해서 뭘 하고 있나요.

    1-4) 문제에서 "A,B는 모두 0보다 크고 10보다 작다"고 한 것은, 주어지는 모든 입력이 이 조건을 만족한다는 뜻입니다. 제출자의 입장에서 이걸 검사해야만 한다는 뜻은 아닙니다.

2) 코드의 흐름에 따르면, 7번 줄에서 A,B에 값을 입력받은 후, 8번 줄에서 A+B가 0이 아닌지 확인하여 다음을 "반복"합니다. 9번 줄에서 A+B의 값을 출력합니다.

    2-1) 7번 줄에서 받은 값은 일단 8번 줄에 진입한 후에는 바뀌지 않습니다. 즉, 8번 줄의 논리식은 한번 참이면 계속 참이기에, 출력을 "무한히 반복"합니다.

3) 그러면 이 코드는 어떻게 고쳐야 할지 생각해봅시다. 문제에서 입력을 받고, 그 입력이 0,0인지 확인해서 맞으면 끝내면 됩니다. 아니라면 출력 및 반복을 해야겠죠.

    3-1) 다시 말하면, 반복하는 과정 중에 입력 받는 내용이 있어야 합니다. 이 코드는 그것을 지키고 있나요?

4) EOF는 이 문제와 관련이 없지만, 요청하시니 간략하게 답변을 드립니다.

예를 들어 어떤 파일로부터 값을 읽어들인다고 합시다. 2개의 정수를 읽어들이는데, 파일에 1개의 정수밖에 없습니다.

그러면 두번째로 정수를 읽으려고 "시도할 때" 문제가 생기겠죠. "파일의 끝"에 도달했음에도 읽을 수 있는 값이 없다는 뜻입니다.

이를 EOF (End Of File)이라 하고, (현재까지의) C언어에서는 -1의 값을 갖습니다.

댓글을 작성하려면 로그인해야 합니다.