PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/03/18 14:05:05
Name 김영대
Subject 아주 간단한 C++ 질문입니다.
보시면 아시겠지만, 반복 때문에 길이만 길었지 완전 기초중의 기초입니다.

//성적표 ver1.1

#include <iostream>
using namespace std;

int main()
{
        while (1)
        {
                cout << "\n------메뉴------\n";
                cout << "1. 학생 성적 추가\n";
                cout << "2. 전체 성적 보기\n";
                cout << "Q. 프로그램 s종료 \n";
                cout << "-----------------\n";
                cout << "원하는 작업의 번호를 입력하세요." ;
                
                
                int S1_No, S2_No, S3_No;
                int S1_Kor, S2_Kor, S3_Kor;
                int S1_Eng, S2_Eng, S3_Eng;
                int S1_Math, S2_Math, S3_Math;
                float S1_Ave, S2_Ave, S3_Ave;
                float TotalAve = 0.0f;
                int NumberOfStudent = 0;
                
                
                char select;
                cin >> select;
                
                switch (select)
                {
                case '1':
                        {
                                if (3==NumberOfStudent)
                                {                                
                                        cout<< "\n더 이상 입력할 수 없습니다.\n";
                                        break;
                                }
                                
                                int Kor, Eng, Math;
                                
                                cout << "국어, 영어, 수학 점수를 입력하세요. : ";
                                cin >> Kor >> Eng >> Math;
                                
                                float Ave = float(Kor+Eng+Math)/3.0f;
                                
                                if (0==NumberOfStudent)
                                {
                                        S1_No = NumberOfStudent + 1;
                                        S1_Kor=Kor;
                                        S1_Eng=Eng;
                                        S1_Math=Math;
                                        S1_Ave=Ave;
                                        
                                        TotalAve = S1_Ave;
                                }
                                
                                else if (1==NumberOfStudent)
                                {
                                        S2_No = NumberOfStudent + 1;
                                        S2_Kor=Kor;
                                        S2_Eng=Eng;
                                        S2_Math=Math;
                                        S2_Ave=Ave;
                                        
                                        TotalAve = (S1_Ave + S2_Ave)/2;
                                }
                                else
                                {
                                        S3_No = NumberOfStudent + 1;
                                        S3_Kor=Kor;
                                        S3_Eng=Eng;
                                        S3_Math=Math;
                                        S3_Ave=Ave;
                                        
                                        TotalAve = (S1_Ave + S2_Ave + S3_Ave)/3;
                                }
                                
                                NumberOfStudent++;
                                
                                cout << "\n학생 성적이 올바르게 입력되었습니다. \n";
                                
                                break;
                        }
                        
                case '2':
                        {
                                cout << "\n전체 성적 보기 \n";
                                cout << "학번 국어 영어 수학 평균 \n";
                                for (int i = 0; i < NumberOfStudent; ++i)
                                {
                                        if (0==i)
                                        {
                                                cout << S1_No << " " << S1_Kor << " " << S1_Eng;
                                                cout << " " << S1_Math << " " << S1_Ave << "\n";
                                        }
                                        else if (1==i)
                                        {
                                                cout << S2_No << " " << S2_Kor << " " << S2_Eng;
                                                cout << " " << S2_Math << " " << S2_Ave << "\n";
                                        }
                                        else
                                        {
                                                cout << S3_No << " " << S3_Kor << " " << S3_Eng;
                                                cout << " " << S3_Math << " " << S3_Ave << "\n";
                                        }
                                }
                                cout << "\n전체 평균 = " << TotalAve<< "\n";
                                
                                break;
                        }
                case 'q':
                case 'Q':
                        cout << "\n프로그램을 종료합니다. \n";
                        return 0;
                        
                default:
                        cout << "\n올바른 값을 입력해 주세요.\n";
                }
        }
        return 0;
}

1번 눌렀을 때 세 번만 점수 입력 되야 되는데 자꾸 입력되구요.
2번 누르면 점수가 출력되야 되는데 그냥 아무것도 안 나옵니다.
책에서 시키는대로 했는데 이상하네요. 아....

아 그리고 혹시 프로그래밍 언어 질문같은거 할 수 있는 사이트 같은데 없을까요?

복학해서 공부 하는데 원래도 못 했지만 진짜 미치겠네요.. 머리가 그냥 돌인것 같아요......

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
Je ne sais quoi
10/03/18 14:16
수정 아이콘
여러가지 문제가 있지만 일단 말씀하시는 부분은 while (1) 안에 NumberOfStudent = 0;가 있기 때문입니다. 프로그램 전체에서 사용할 변수가 while (1) 안에 있으니 사용자가 입력을 해봐야 다시 전체 loop 타면 다 초기화됩니다. 사용자 점수 부분도 그렇구요. 지금 상태로는 입력해봐야 사용자 수 0, 점수 0 모두 0입니다. 그럼 김영대님의 숙제점수도... ^^
우선 사용자 점수는 배열로 바꾸시고, 필요한 변수는 while (1) 밖으로 gogogo
10/03/18 14:16
수정 아이콘
일단 물어보신것을 해결하기 위해서는 변수의 스코프를 공부하시길 바랍니다.

int S1_No, S2_No, S3_No;
int S1_Kor, S2_Kor, S3_Kor;
int S1_Eng, S2_Eng, S3_Eng;
int S1_Math, S2_Math, S3_Math;
float S1_Ave, S2_Ave, S3_Ave;
float TotalAve = 0.0f;
int NumberOfStudent = 0;

while (1)
{
............

이렇게 바꾸시면 문제는 해결 될겁니다.
그리고, 추가로 배열과 구조체에 대해서도 공부하면 코드가 조금더 깔끔해 질겁니다.
10/03/18 14:19
수정 아이콘
그리고 조건문 쓸 때는 앞에 변수이름을 적어주는 게 일반적입니다. =_=
if(NumberOfStudent == 3) 이런 식으로다가..
꿀호떡a
10/03/18 14:21
수정 아이콘
변수 선언을 밖에서 하셔야죠 ^^;
int S1_No, S2_No, S3_No;
....
int NumberOfStudent = 0;
이 부분을 while 안에 넣으시면.. while이 될 때마다 새로 초기화되고 새로 초기화되고.. 그러면 원하는 값이 안나오겠죠?
음 그리고 프로그래밍 언어 질문은 왠간한건 PGR에 하시면 됩니다 :) 능력자분들이 많으셔서..
Cazellnu
10/03/18 14:24
수정 아이콘
신텍스 같은거야 여기저기 왠만한 커뮤니티에 물어봐도 잘 대답해 줍니다.
그런데 ipc로 들어가거나 미들웨어요런거는 질문할곳 찾는게 어려울겁니다.
kldp같은데서도 찾기 좀 어려우니까요. 하지만 뭐 어짜피 학교에서 배우는거라면 그럴경우 까진 없다고 보면 됩니다.
하루04
10/03/18 14:38
수정 아이콘
c공부 할때 www.winapi.co.kr 가서 많이 봤어요
강좌랑 레퍼런스가 잘 되있어서~ 많은 도움 되실 거에요
Shura님// 음 if (0==NumberOfStudent) 이런식으로 상수를 앞에 쓰는건
if ( NumberOfStudent = 0 ) 을 방지하는 측면에서 괜찮다고도 생각됩니다. (말들이 많긴 하지만..)
김영대
10/03/18 14:42
수정 아이콘
우오오오 우오아아 답변 모두 감사드립니다. 눈물이 흐르네요. ㅠㅠ

아직 진도가 배열까지 안 나간 상태에서 하는 거라 저렇게 코드가 덕지덕지 더럽네요.

이건 숙제는 아니고 예습차원으로 해본건데 진짜 혼자하다가 백덤블링 할 뻔했네요....

정말 감사드립니다. ㅠㅠ 우어어엉
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
77026 32비트 64비트에 대해서 궁금합니다. [2] 김선태1940 10/03/18 1940
77025 스타2 초대장에 대해서 올려요 [1] sekhmet1828 10/03/18 1828
77024 스타2 테란 기본적인 체제좀 알려주세요 [4] 1Ryu2135 10/03/18 2135
77022 전자렌지가 주는 열량은 어느정도 인가요. [4] 애이매추3237 10/03/18 3237
77021 디카에 대해서 질문 드려요~ [4] 이히리기우구1540 10/03/18 1540
77020 3탱크 1베슬 마메 2부대 러쉬 막는방법 알려주세요 ㅠㅠ 너무 어려워요 [7] 멜로2904 10/03/18 2904
77019 50대 일자리 구하는 법 질문드립니다. [10] 고지를향하여2552 10/03/18 2552
77018 솔더링 페이스트는 어떻게 쓰는 건가요? [1] azurespace3160 10/03/18 3160
77017 스타2베타키 대해서 질문드립니다.빠른답변 감사하겠습니다. [5] NexT_R1932 10/03/18 1932
77015 밑에 로즈마리님글(모르는 사람이~) 에 관련하여 질문드립니다. [12] 彌親男2106 10/03/18 2106
77014 프로그래밍 질문입니다. 고수분들 도움을... [1] KNU백1419 10/03/18 1419
77013 아주 간단한 C++ 질문입니다. [9] 김영대2152 10/03/18 2152
77012 알콜 분해효소가 몸에 전혀 없는 사람은 술을 마시면 어떤 증상이 있나요? [17] DavidCoverdale27513 10/03/18 27513
77011 사설서버 질문입니다. [9] mylove50021679 10/03/18 1679
77010 원룸 매매 관련 조언구합니다. [14] 천둥1949 10/03/18 1949
77009 악보를 찾습니다. 허느님맙소사1745 10/03/18 1745
77007 모르는사람이 주는 음식을 잘 드시는 편이신가요? [73] 로즈마리5698 10/03/18 5698
77005 노트북 구입 관련 도움 요청드립니다. [5] Samo.302Tank1581 10/03/18 1581
77004 리뷰 잘못쓰면 영업방해로 형사처벌 될 수 있나요? [8] 천외천2786 10/03/18 2786
77003 노트북 듀얼 모니터 문제 때문에 질문드립니다. President_Y2143 10/03/18 2143
77001 컴터 본체 가격이 이정도면 적정한가 질문드립니다. [7] goGo!!@heaveN.2195 10/03/18 2195
77000 아침에 일어나보니 엉덩이 쪽이 너무 아프네요. [5] 벤카슬러1927 10/03/18 1927
76999 3월3일 부터 경기 추천부탁드립니다.. [3] 리니시아2123 10/03/18 2123
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로