lucychris   2년 전

c언어 공부 처음부터한 초보자입니다. 컴파일에러가뜨는데 무엇때문에 뜨는지 알수없어 질문드립니다 .

djm03178   2년 전

컴파일 에러가 아니라 런타임 에러를 받으셨습니다. 그리고 질문을 올리기 전에, 더 나아가 제출을 하기 전에 반드시 로컬에서 테스트를 하고 스스로 디버깅을 해봅시다.

lucychris   2년 전

혹시 초보는 질문하면안되나요? 비쥬얼스튜디에서 실행할때는 되던데 저렇게봐도 이해가안가더라고요 . .

djm03178   2년 전

문제를 푼다는 건, 해당 코드가 문제에 주어진 조건에 맞는 입력들에 대해 항상 올바를 정답을 출력할 수 있게 만들어야 한다는 뜻입니다. 이 코드는 비주얼 스튜디오건 어느 컴파일러건 올바른 정답을 찾아낼 수가 없습니다. 단순히 실행이 된다고 해서 비주얼 스튜디오에서 되는 게 아니라, 입력을 넣었을 때 답이 잘 나와야 되는 것입니다.

큰 문제점들을 집자면, 우선 n은 char형 하나이기 때문에 문자열로 입력을 받을 수 없습니다. &를 붙인다고 해서 문자열을 입력받을 수 있는 것이 아닙니다. 문자열은 char형 배열에 받아야합니다.

또한 n이 char형이기 때문에 출력 역시 %s로 할 수 없습니다. %s는 문자열을 출력해야 하고, 그러려면 문자열의 시작 주소 (예를 들면, char형 배열의 이름)를 넘겨줘야 하는데, 지금은 그저 char형 하나의 값을 넘겨주고 있습니다. 주소가 있어야 할 자리에 문자 값이 있으니, 답이 잘 출력될 수 없겠죠?

그리고 이 문제는 한 줄이 아니라 여러 줄을 입력받을 수 있어야 하는데, 6번째 줄의 scanf는 한 줄밖에 읽을 수가 없습니다. 여러 줄을 입력받는 방법은, EOF에 대해 알아보셔야 합니다.

lucychris   2년 전

#include<stdio.h>

int main()
{
    char n[20];
    scanf("%[^\n]",&n);
    printf("%s",n);
}

답글해주셔서 감사합니다.. 비쥬얼스튜디오 2017버전을 쓰고있는데 입력과 출력이 잘되고있어가지고,, 작성자 선생님께서는 이코드돌리면 출력이안되시나요? ㅠ


djm03178   2년 전

지금의 코드는 질문에 올리신 코드보다는 훨씬 낫습니다. 이제 n이 char형 배열이 되었으니까요. 하지만 여전히 문제에서 요구하는 조건을 지키지 못하고 있습니다.

우선, 여전히 이 코드는 단 한 줄만을 입력받고 있습니다. 문제에서는 여러 줄이 주어질 수 있고, 이를 전부 입력받아서 처리할 수 있어야 합니다. 위에서 말씀드린 대로, EOF에 대해 공부해보셔야 됩니다.

또한 문제에서는 "각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다." 라고 하고 있습니다. n의 크기가 20인데, 한 줄에 100글자가 들어오면 어떻게 될까요? 20의 크기의 배열에 다 담을 수 있을까요?

lucychris   2년 전

감사합니다 작성자선생님 틀렸습니다로 나오면 맘편할텐데 런타임에러라고나오니까 틀린지도모르고 고민하고있었네요. 말씀해주신대로 EOF검색해서 공부하고 다시해보겠습니다 좋은하루되세요 !

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