값들을 파일로 저장후 파일을 읽어 들여와 평균에 따라 내용을 출력하는 과제 문제에 대하여 무한 루프가 발생함 파일저장에는 문제가없지만 파일 읽기에서..
글쓴이: seanmf / 작성시간: 일, 2011/12/04 - 11:30오전
파일로 소스코드 올렸어요
Q) 다음 조건을 만족하는 프로그램을 작성하시오.
[점수 출력 프로그램 만들기]
조건 1. 이름, 수학 점수, 영어 점수, 컴퓨터 점수를 사용자가 ctrl + z(EOF)를 누를 때까지 입력 받는다.
조건 2. 받은 데이터를 파일로 저장한다. (input.dat)
조건 3. 저장 한 파일을 읽어서 원하는 점수 범위 내에 있는 사람들을 출력한다.
(1. 평균 100점
2. 평균 80점 이상 ~ 100점 미만
3. 평균 60점 이상 ~ 80점 미만
4. 평균 60점 미만
5. 종료)
getRequest()함수호출에서
무한 루프가 발생합니다.
파일출력부 를 주석처리하면
문제없지만
파일출력부를 주석처리 안할시
파일저장하 파일읽기하면
무한루프가 발생
해결좀 해주세요
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 4.08 KB |
Forums:
무한루프는 while에서 조건이 바뀌질 않으니까
무한루프는 while에서 조건이 바뀌질 않으니까 생기죠.
ONE과 END가 while에서 참조 가능한 범위 안에 없네요
그리고 함수 가장 앞에 보면 ONE과 END를 정해놓은 것 같은데 ONE < END 인 경우에 request < ONE이면서 request > END인 경우가 가능한가요?
피할 수 있을때 즐겨라! http://melotopia.net/b
do~ while 문이므로 1~4 밖에 범위시 반복이라는뜻입니다.
do~ while 에서 1 ~ 5 아닌다른입력값이 들어오면 예외처리로 무한반복시켰습니다.
do
{
cout << "\n? ";
cin >> request;
} while ( request < ONE && request > END );
파일이없다면 clients.txt 가없다면 생성하기를 /* */ 주석처리하면
파일읽기부터시작한다면
프로그램은 잘돌아가나
파일에 생성부분을 주석처리안하고 붙어서 쓰면
무한루프발생 합니다.
논리가 잘못된 듯 합니다. request < ONE
논리가 잘못된 듯 합니다.
request < ONE && request > END 를
request < ONE || request > END 로 바꿔서 해보세요.
바꿔봤는데 안되요
바꿨는데도 안되네요..같은 증상이네요
입력 받는 부분 오류 수정, 논리 오류 수정.
제가 C++을 몰라서 scanf 썼습니다.
do { //do~while부분 1~5아닌
이부분은 개선해야할 소지가 있습니다. 알파벳 입력했을 경우 문제가 발생됩니다.
C 언어 손 놓은지가 굉장히 오래되어 기억이 잘 안나는데... getch, getchar, atoi 이런 걸 이용해서 1개 문자만 받아서 숫자로 만들면 좋습니다.
do ... while 로 처리할 것이 아니라...
아래처럼 작성하면 알아보기 한결 수월해집니다.
올려주신 코드를 보면 주함수(main) 제어구조와 서브함수 부분의 제어구조가 중복이 됩니다.
그런 군더더기를 줄여 주면 한결 알아보기 쉬운 코드가 됩니다.
그 부분은 제가 숙제로 남겨드리겠습니다.
열공하세요.
if(request >= 1 && request <=
if(request >= 1 && request <= 5) 가 되어야 되는군요. 헷갈려.
cin 과 scanf 가 다르네요 .해결되었습니다.
논리문제가아니라
cin과 scanf문제같습니다.
cin으로 하니 무한루프가 발생하는데
scanf로 찍으니 무한루프없이 프로그램 잘돌아가네요
왜그럴지모르겠네요
cin이 객체라서 그런건지 ..
디버깅으로 돌리면 request 값이 -842398434 값이 들어오네요 입력을 받지도 못하고
리턴값이 쓰레기다보니
무한루프가 발생하는데
scanf로 찍으면 입력을 할수있으니 리턴값이 나와 무한루프가 안생기네요
이상하네....
해결되었습니다.
단지 cin과 scanf 의 차이로 ..
scanf로찍으니 ... 정상처리되네요
논리와는 관계 없는 댓글이라 딴지 거는 것 같아서
논리와는 관계 없는 댓글이라 딴지 거는 것 같아서 죄송합니다만, 조건1에서 CTRL+Z 가 아니라 CTRL+D 아닌가요?
윈도우에서는 CTRL+Z 가 EOF죠.
윈도우에서는 CTRL+Z 가 EOF죠.
댓글 달기