:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
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코딩 해본지가 오래되서;;
10/05/02 23:59
while문 뒤에 검색하는부분만 수정했습니다. n/N이 입력되면 break 로 반복문을 강제로 탈출합니다.
아,,, 제일 위에 ans 서 선언할때 초기값 0 줘보실래요? 제가 do while을 안써서 기억이 잘 안납니다만. do에서 무조건 실행하고 첫 while걸릴때는 입력값에 상관없이 기존의 ans값을 쓰는거로 사료됩니다...
10/05/03 00:16
우선 해 보니 위의 scanf로 가지 않는 게 아니라 아래의 scanf가 실행이 되지 않네요.
근데 왜 그런지는 잘 모르겠어요;;
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초전에 내려올팀은 내려온다님이 답하셨군요.. @_@;
|