PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/05/02 23:40:42
Name Phwary
File #1 ccc.JPG (48.0 KB), Download : 6
Subject c언어 프로그램 작성에 대한 질문입니다.


과제로 c프로그램 짜고 있는데 맞게 짠것 같은데.. 안되네요...
잘 아시는분 틀린부분이 있으면 지적해 주시면 감사하겠습니다(__)

문제는 숫자와 연산자를 입력받아서 숫자 사이의 모든 수를 연산하는 겁니다.(입력받는 숫자는 앞의 숫자가 작도록 입력)
예를들면 3+7이라고 쓰면 3+4+5+6+7 을 연산하는거죠.
그리고 마지막에 y,n으로 계속 실행할지 물어서 y이면 계속실행 n이면 프로그램 종료하도록 해야합니다.


#include <stdio.h>

int main(void)
{
        int a,b,result,ans;
        char oper,answer;

        printf("작은정수 연산자<+, *중 하나> 큰정수 형태로 입력하세요...\n");
        printf("number1 operator number2\n");
        printf("두 수 사이의 모든 값을 더하거나 곱한 결과를 출력합니다...\n");
        

        
        do                                                        //do while문을 이용해서 y,n구별하래서 do while문 시작합니다.                
        {
                scanf("%d %c %d",&a,&oper,&b);            // 숫자와 연산자 표준입력
        
                if(oper=='+')                                        //if문으로 +를 입력할시...
                {
                        result=0;                                    //result값을 0으로 해서 더할때 영향 안받로록..

                        printf("min = %d, max = %d, ",a,b);  // 이렇게 민값 맥스값 출력한다음...

                        while(a<=b)                           //while문이용해서 반복연산으로 두 수사이의 모든 수의 합을 구하려고합니다.
                        {
                                result += a;
                                a++;
                        }
                        printf("result = %d\n",result);              //합 출력
                }
                else if(oper=='*')                           //곱셈연산자 입력받았을시 조건문 else if 입니다.
                {
                        result=1;                                //곱셈이기에 result값을 1로 초기화 해서 곱셈에 영향받지 않도록,...
                
                        printf("min = %d, max = %d, ",a,b);         //합할때와 똑같이 민값 맥스값 먼저 출력하구요

                        for(a;a<=b;a++)                        //이번엔 for문을 이용해서 두 수사이의 모든수의 곱셈을 반복문으로 짭니다.
                        {
                                if(a==0) continue;            // 곱셈이라 만약 두수 사이에 0이 들어가면 곱셈하지않고 continue합니다.
                                result *= a;
                        }
                        printf("result = %d\n",result);   //역시 반복문 실행시의 결과 출력입니다.
                }
        
                printf("계속하려면 y/Y를 끝내려면 n/N키를 눌러 주세요...");           //마지막에 프로그램 계속 실행할지 물어보는 출력
                scanf("%c\n",&answer);                                                       //n또는 y를 표준입력 할수 있도록 합니다.
        
                if((answer=='n')||(answer=='N'))                                //do while문이라서 마지막 while의 조건검사를 위해 ans라는 변수0
                                                                                                      또는 1을 선언하도록 합니다
                        ans=0;
                else if((answer=='y')||(answer=='Y'))
                        ans=1;
                

        } while(ans);                       //do while문의 조건검사
        printf("\n");
                
        return 0;
}



이렇게 짜봤는데, do while문으로 y,n 구분 하래서 처음부터 do를 쓰고 마지막에 while 조건검사에서 ans=0이면 프로그램 종료되도록
n또는 N을 입력받았을 때 ans=0으로 해서 while의 조건검사를 받도록 했는데... 결과가 안나오네요..
위에서 반복문 이용한 합이나 곱은 계산외 되는데 마지막 y,n받는 부분에서
y를 쓰면 do 바로밑의 scanf로 가서 다시 숫자 입력 받는 줄 알았는데... 그냥 min값 max값이 다른값으로 지정되어서 바로 나오고
result는 0값이 나오네요...
그리고 n을 치면 같은 현상 나오고
두번연속 n을 쳐야지만 프로그램이 종료됩니다.
결과사진 첨부했습니다....

제가 컴퓨터관련 학과가 아니고 전공기초 과목으로 C를 듣는거라서 어려운 함수라든지 그런건 안배웠구요
이제 조건문 반복문까지 겨우 배웠습니다. 저기 위의 소스 아래서 뭐를 바꿔야지 제대로 프로그램을 짤수 있을지요.

꼭 부탁드립니다....(__)

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
WizardMo진종
10/05/02 23:50
수정 아이콘
비전공자가 처음하신거치곤 참 잘 하셨는데요.
#include <stdio.h>

int main(void)

int a,b,result,ans;
char oper,answer;

printf("작은정수 연산자<+, *중 하나> 큰정수 형태로 입력하세요...\n");
printf("number1 operator number2\n");
printf("두 수 사이의 모든 값을 더하거나 곱한 결과를 출력합니다...\n");



do //do while문을 이용해서 y,n구별하래서 do while문 시작합니다.
{
scanf("%d %c %d",&a,&oper,&b); // 숫자와 연산자 표준입력

if(oper=='+') //if문으로 +를 입력할시...
{
result=0; //result값을 0으로 해서 더할때 영향 안받로록..

printf("min = %d, max = %d, ",a,b); // 이렇게 민값 맥스값 출력한다음...

while(a<=b) //while문이용해서 반복연산으로 두 수사이의 모든 수의 합을 구하려고합니다.
{
result += a;
a++;

printf("result = %d\n",result); //합 출력
}
else if(oper=='*') //곱셈연산자 입력받았을시 조건문 else if 입니다.

result=1; //곱셈이기에 result값을 1로 초기화 해서 곱셈에 영향받지 않도록,...

printf("min = %d, max = %d, ",a,b); //합할때와 똑같이 민값 맥스값 먼저 출력하구요

for(a;a<=b;a++) //이번엔 for문을 이용해서 두 수사이의 모든수의 곱셈을 반복문으로 짭니다.
{
if(a==0) continue; // 곱셈이라 만약 두수 사이에 0이 들어가면 곱셈하지않고 continue합니다.
result *= a;

printf("result = %d\n",result); //역시 반복문 실행시의 결과 출력입니다.
}

printf("계속하려면 y/Y를 끝내려면 n/N키를 눌러 주세요..."); //마지막에 프로그램 계속 실행할지 물어보는 출력
scanf("%c\n",&answer); //n또는 y를 표준입력 할수 있도록 합니다.
============================
if((answer=='n')||(answer=='N')) //do while문이라서 마지막 while의 조건검사를 위해 ans라는 변수0
또는 1을 선언하도록 합니다
break; --------------->수정했습니다.

============================
} while(ans); //do while문의 조건검사
printf("\n");

return 0;
}
요렇게 한번 해보실레요? c코딩 해본지가 오래되서;;
WizardMo진종
10/05/02 23:59
수정 아이콘
while문 뒤에 검색하는부분만 수정했습니다. n/N이 입력되면 break 로 반복문을 강제로 탈출합니다.

아,,, 제일 위에 ans 서 선언할때 초기값 0 줘보실래요?
제가 do while을 안써서 기억이 잘 안납니다만.
do에서 무조건 실행하고 첫 while걸릴때는 입력값에 상관없이 기존의 ans값을 쓰는거로 사료됩니다...
내려올팀은 내
10/05/03 00:16
수정 아이콘
우선 해 보니 위의 scanf로 가지 않는 게 아니라 아래의 scanf가 실행이 되지 않네요.
근데 왜 그런지는 잘 모르겠어요;;
WizardMo진종
10/05/03 00:19
수정 아이콘
아 개행 문자가 그안에 들어가버리는군요;; scanf 후에는 \n을 안넣어 주셔도 되던걸로 기억을 합니다. 그거 아마 빼셔도 실행될꺼에요.
내려올팀은 내
10/05/03 00:40
수정 아이콘
아 왜그런지 알듯 합니다.
첫번째 scanf에서 3+5를 입력하고서 엔터를 쳤는데, 이 엔터가 두번째 scanf의 첫번째 character로 들어가는군요.
그래서 두번째 scanf에서는 앞에 \n을 넣든지 dummy variable을 넣든지 해야 오류가 생기지 않습니다.

맨날 matlab만 쓰다 C 써보니 머리에 쥐날것 같군요 ㅠㅠ
큐리스
10/05/03 00:40
수정 아이콘
scanf로 입력을 받을 때 엔터도 입력을 받을 생각이면 \n을 해주셔야 되는 게 맞습니다.
이 문제의 경우 %c\n을 \n%c로 바꾸는 게 아니라
scanf("%d %c %d",&a,&oper,&b);
부분을
scanf("%d %c %d\n",&a,&oper,&b);
으로 해주시는 게 더 정확합니다.
줄 끝에 \n을 안 넣어주시면
입력 버퍼에 \n이 남아있다가 다음에 수행되는 scanf의 입력으로 들어가기 때문에 질문과 같은 문제가 발생하는 것입니다.
라고 열심히 쳤더니 7초전에 내려올팀은 내려온다님이 답하셨군요.. @_@;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
80710 수학문제 질문입니다.. 고수님들 도와주세요! [7] Lionel Messi2168 10/05/03 2168
80708 마블 코믹스계의 영화와 파라마운트, 디즈니와의 관계에 대한 질문입니다! [1] wannabein2288 10/05/03 2288
80707 음.. 여성분들에 대한 질문인데요..! [8] 곰비2431 10/05/03 2431
80706 컴터가 사망했습니다..다시살려하는데 컴맹이라 봐주세요 [8] 피스~2124 10/05/03 2124
80705 좋은 우리나라 발라드 추천부탁드립니다. [6] 밤톨이2721 10/05/03 2721
80704 4년제 피아노과에 대해 [4] 오월2575 10/05/03 2575
80703 던파 쭉하신분들~ 질문!! [3] 구하라1908 10/05/02 1908
80701 그리스 로마 신화 책 추천해주세요 [5] 한아3376 10/05/02 3376
80700 c언어 프로그램 작성에 대한 질문입니다. [13] Phwary6792 10/05/02 6792
80699 "도전 추리특급"을 기억하시는 분이 있을까요? [7] 큐리스4650 10/05/02 4650
80698 최근 프로리그에서 진영수의 출전이 뜸한 이유가 뭘까요? [9] run to you2619 10/05/02 2619
80697 DSLR의 필요성에 대한 질문입니다. [7] gL2604 10/05/02 2604
80696 생화학 질문입니다 [1] goEngLanD2528 10/05/02 2528
80695 동영상 업로드 사이트 질문입니다; [3] 이하늘2291 10/05/02 2291
80694 집에서 공부하는 비법(?)이 궁금합니다. [18] Kaga2746 10/05/02 2746
80693 PC 견적 질문 [7] Noki~1872 10/05/02 1872
80692 작업표시줄 관련 질문입니다. 리나장1734 10/05/02 1734
80691 액셀에서 에러바 포함한 그래프 그리기. 허느4781 10/05/02 4781
80690 증명 사진 수정하려면 어떻게 하나요? [2] 나이스후니2384 10/05/02 2384
80688 카메라 렌즈 문제입니다 오류가 나요 [6] 잔디머리2147 10/05/02 2147
80687 동물 질문입니다. 말(horse)과의 의사소통 [2] 개의눈 미도그2149 10/05/02 2149
80686 Floating number문제입니다. ㆀThe.Scvㆀ1871 10/05/02 1871
80685 스타2 리플 보는법 [1] Endor2313 10/05/02 2313
목록 이전 다음
댓글

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