초보 프로그래머의 오류
글쓴이: 6Gelemen / 작성시간: 수, 2019/07/24 - 9:13오후
소수 예제를 짰는데 제대로 작동하지가 않네요 -_-;;
도와주시면 감사하겠습니다.
int main(void) { int num1 = 1; while (num1 < 10000) { for (int num2 = 1;num2 < num1;num2++) { if (num1 == 1) //1은 소수가 아니므로 goto PLUS; else if (num2 == 1)//1로나누면 안되기 때문 continue; else if (num1 == num2)//여기에도달하면num1이하의모든수로나눈것임 { printf("%d는 소수입니다./n", num1); goto PLUS; } else if (num1 % num2 == 0)//소수가 아니기 때문 goto PLUS; } PLUS: num1++; } }
Forums:
디버그를 해 보세요. line by line 으로
디버그를 해 보세요. line by line 으로 실행하다 보면 대부분 해결됩니다.
복잡한 디버거를 따로 쓸 것도 없이,
복잡한 디버거를 따로 쓸 것도 없이,
안쪽 for 루프 블록 첫 줄에
이렇게 현재 변수값만 출력시켜보셨어도 바로 깨달을 수 있었을 겁니다. num1 == num2 인 조건을 만족시킬 가능성이 없네요.
좋은 하루 되세요!
goto 안 쓰는 걸 권고합니다. goto는 옛날에
goto 안 쓰는 걸 권고합니다. goto는 옛날에 많이 쓰던 건데 유지보수 어려워서 요즘엔 잘 안 써요...
세벌 https://sebuls.blogspot.kr/
모듈화만 잘하면 유지보수가 어려운일은 없을텐데요
모듈화만 잘하면 유지보수가 어려운일은 없을텐데요
세벌님 말씀에 동의하기 어렵네요.
세벌님 말씀에 동의하기 어렵네요.
뭐든 필요하기에 쓰이기 마련인데, 단순히 요즘에 안쓰니 권고하지 않는다는건 초보 프로그래머에게 문법에 대한
이유없는 편견이 생기게 할수 있습니다.
goto문은 다중 for문 탈출이라던지, 적절한 예외처리에 오히려 가독성을 높여줄수 있습니다.
즉, 필요하면 쓰는겁니다!!!!
세벌님 의견도 맞고, greeze님 의견도 맞습니다.
세벌님 의견도 맞고, greeze님 의견도 맞습니다.
음...
제가 저번에 goto를 안 쓰고 소수 예제를 짰는데 스파게티 코드가 되더군요.
코드의 목적에 따라 case by case 로 봐야 하는 것 같습니다.
그래서 어떻게 바궈야 하죠?
그래서 어떻게 바궈야 하죠?
num2 가 num1 과 같아지지 못하는 게 원인이니
num2 가 num1 과 같아지지 못하는 게 원인이니, for 문의 조건을
num2 <= num1
으로 고치세요.좋은 하루 되세요!
감사합니다
로 해서 잘 됐네요.
감사합니다!
댓글 달기