문자열 순서까지도 역으로 나와서..

Woojaeik Reply 7 years 33 weeks ago
문자열 순서까지도 역으로 나와서요ㅠㅠ 아마 그 이유는 한 배열에 다 집어넣고 그걸 뒤집어 버려서 그런거 같습니다(맞나요?ㅠㅠ) 그래서 매번 문자열 뒤집고나서 배열을 초기화 해주는 요런방식 #include <stdio.h> int main() { int c, i, j, k; char s[1000] = { 0 }; char rs[1000] = { 0 }; i = 0; while (c != EOF) { for (i = 0; (c=getchar()) != EOF; i++) { if (c == '\n') { s[i] = '\0'; for (k = 0; k < 1000; k++) { rs[k] = s[i - 2 - k]; } rs[++k] = '\n'; rs[++k] = '0'; printf("%s", rs); char s[1000] = { 0 }; char rs[1000] = { 0 }; } s[i] = c; } } return 0; } 으로 해봤는데 더 이상한 값이 나옵니다ㅠㅠ 어떤 문제일까요ㅠㅠ
Woojaeik Reply 7 years 33 weeks ago
제가 저 위에 방식말고 다시 고쳐봤는데요ㅠㅠ 이건 왜 이럴까요ㅠㅠ At vero eos et accusamus et iusto otsui te sumasucca te soe orev tA? odio dignissimos ducimus, qui blanditiis siitidnalb iuq ,sumicud somissingid oido? praesentium voluptatum deleniti itineled mutatpulov muitnesearpi ^Z i 계속하려면 아무 키나 누르십시오 . . . 이렇게 나오는데 저 ?는 어디서 생긴건질 모르겠고 eof 이후에 엔터눌렀을때 생기는 저 i도 뭔질 모르겠습니다ㅠㅠ
Woojaeik Reply 7 years 33 weeks ago
최종적으로 제출한 코드에서 어떤부분이 오류일까요..ㅠㅠ 출력물은 전보다 답에서 더 멀어진 것 같은데.. 어디가 문제일까요
withcs1 Reply 7 years 33 weeks ago
18라인에서 %s는 string을 정의하는 서식문자입니다 char배열을 출력하기위해선 %c를 사용하세요 21, 22라인은 초기화하는게아니라 새로 선언해주시고계시네요. 두번째문장부터 한글자씩밀리는이유는, for문이 완료되면 i값이 증가하는데, for문이 완료되기 직전에 i값에 0을주고있습니다 for문에의해 다시 for문시작지점으로가면 i가 1증가하게되어서 결국엔 두번째문장부턴 i가 1인상태로 for문이 돌게됩니다. 조금만수정하면되겠네요
Woojaeik Reply 7 years 33 weeks ago
비쥬얼에서 돌아가는데 컴파일 에러 뜨는 경우는 어떤 경우인가요?ㅠㅠㅠ 저는 뒤집은 문장마다 맨 마지막 글자가 사라져서 출력되는 문제를 여쭤보려고(비쥬얼에서는 이렇게 실행되더라고요) 제출을 누른다음 여쭤보려 했는데 withcs에서는 아예 컴파일 에러로 나오네요ㅠㅠ 뭐가 문제일까요..
Woojaeik Reply 7 years 33 weeks ago
이제 완벽하게 비쥬얼에서 출력이 됩니다.. 그런데 wrong answer라서 그 이유가 궁금합니다.. 그리고 14,15라인을 뺐더니(주석처리) 비로소 비쥬얼에서 제대로 출력이 되는데(말씀드린대로 withcs에서는 여전히 wrong answer) 대체 왜죠??ㅠㅠ 저는 문자열을 뒤집을 때마다 다음 문자열을 받기 위해서는 기존의 문자열을 저장해 놓았던 배열을 초기화 시켜주는 과정이 필요하다고 생각했는데 그렇지 않은건가요??ㅠㅠ
withcs1 Reply 7 years 33 weeks ago
중괄호{}를 사용하여 배열을 초기화하는 방법은 처음 배열 선언시에만 사용가능합니다. 그 이후엔 for문을 돌려서 0인덱스부터 마지막인덱스까지 값을 변경해주셔야해요 가끔 비주얼스튜디오에서 간단한오류는 잡아주더라구요 그래서 잘돌아가는게 제출하면 에러가 뜨기도합니다ㅠㅠ wrong answer가 나오는 이유는 마지막문장 개행없이 eof가 나오는 경우를 고려하지 않아서인거같네요
Woojaeik Reply 7 years 33 weeks ago
s[0] = '\0'; 제가 이런 방법으로 초기화를 하려는데 이거는 적절할까요? 그리고 window에서 eof는 원래 개행 + eof 를 해야 eof가 먹힌다고 처음에 eof를 배울 때 들었던 것 같은데 그거와는 다른 케이스인건가요?ㅠㅠ
withcs1 Reply 7 years 33 weeks ago
네 s배열의 첫번째값을 바꿔주시는거에요 for(i=0; i<s배열의길이;i++) { s[i] = '\' } 하시면 s배열 모두를 초기화하실 수 있습니다 먹힌다는건 윈도우 명령창에서 키보드로 eof를 입력할때 한줄에 eof 하나만 입력해야 제대로 인식한다는 뜻입니다. 실제로는 리눅스서버에서 코드를 돌리기에 마지막문장은 개행이 없을 수 있습니다 그러고보니 woojaeik님 c수업 수강생이시죠? 제출하신 코드가 전부 C++로 되어있는데 accept된 코드도 c로 다시 제출하셔야할거같아요ㄷㄷ