컴퓨터 프로그래밍 스터디 2조 제 2주차 과제
숫자와 문자를 차례로 입력할 경우 발생하는 문제 해결해보기 :
숫자와 문자를 차례로 입력받는 프로그램의 코드이다.
#include <stdio.h>
int main(void){
int in1; char in2;
printf("Input Integer : "); scanf("%d",&in1);
printf( "Input Charcter : "); scanf("%c",&in2);
}
이 코드를 그대로 실행해 본다면 정수형을 입력후 엔터키를 입력 받지 않는 현상을 목격할 수 있다. 왜 이런 일이 발생하는가?
사용자가 96을 입력했다 가정해보자.
96 '┙'
사용자는 96을 입력후 줄바꿈 문자(Enter Key)를 치게된다.
이 과정에서 scanf() 함수는 이 줄바꿈 문자를 문자로 인식한다. 이로 인해 한 문자열로 받을 때 줄바꿈 문자로 입력 받고 끝난다. 이를 방지하기 위해선
#include <stdio.h>
int main(void){
int in1; char in2;
printf("Input Integer : "); scanf("%d" ,&in1);
fflush(stdin);
printf("Input Charcter : "); scanf("%c" ,&in2);
}
#include <stdio.h>
int main( void){
int in1; char in2;
printf("Input Integer : "); scanf("%d",&in1);
scanf("%*c");
printf("Input Charcter : "); scanf("%c",&in2);
}
위의 코드에 강조되어 있는 scanf("%*c"); 혹은 fflush(stdin);을 사용하여 주면 위와 같은 문제를 예방할 수 있다.
문자열 변수에 대해 알아보기 :
영문 한 글자의 문자를 표현하기 위해선
char in2;
형식으로 변수를 선언하지만 만약 영문 두 글자 이상, 한글 한 글자 이상, 특수문자 한 글자 이상을 입력하기 위해선 위의 형태로 변수 선언을 하면 입력 받지 못한다. 따라서 아래와 같은 형태로 변수 선언을 해준다.
char in2[10];
위의 선언의 뜻은 in2란 이름으로 10개의 메모리 공간을 예약한다는 의미이다. 이렇게 하면 모든 글자 10byte를 입력 받을 수 있다. 휴대전화로 문자를 보내보면 알 수 있듯이 한글은 한 글자에 2byte를 소모한다. 한글을 10글자 쓰기 위해선 [20]이라 선언해야 한다.
한글 5글자 혹은 영문 10글자를 입출력 예제는 아래와 같다.
#include <stdio.h>
int main(void){
char in2[10];
printf("Input Charcter : "); scanf("%s",&in2);
printf("Your Input Data Is %s",in2);
}
여기서 문자열을 입출력 받는 출력인자는 %s임을 알 수 있으며 입력과 출력 시 여태까지 했던 숫자형태의 출력과 별반 차이가 없음을 알 수 있다.
배열에 대해 알아보기 :
위의 char in2[10]; 의 형태는 사실 변수를 배열 형태로 선언한 것이다. 10개의 공간에 각각의 명칭을 표기하는 대신 하나의 명칭으로 통일한 것이라 볼 수 있다. 그러나 그 통일된 뒤에도 자신의 다른 이름이 붙는다. 예를 들어 우린 김철수, 김영희, 김진수란 사람들을 김씨라 통일해 부를 수 있지만 각각은 철수, 영희, 진수란 이름을 갖는다. 변수의 배열 또한 마찬가지이다.
#include <stdio.h>
int main(void){
int in1[1];
printf("Input Integer : ");scanf("%d",in1);
}
위와 같이 소스코드를 작성하면 오류가 났다고 할 것이다. in1을 부르긴 했지만 정확히 누구인지 부르지 않았기 때문이다. 위와 같이 하면 문제가 해결된다.
#include <stdio.h>
int main(void){
int in1[1];
printf("Input Integer : ");scanf("%d",in1[0]);
}
여기서 유의할 점은 in1[0]으로 입력받은 것이다. in1[1]로써 in1이란 성을 갖는 사람 1명을 만들었지만 C언어에선 첫번째 사람이 아닌 0번째 사람부터 시작한다.
2주차 문제:
- 성적을 입력 받아 총점과 평균 값을 구하는
프로그램을 구현하십시오.
문제 조건:
1. 배열을 사용해야 합니다.
2. 성적은 최대 열 개까지 입력 할 수 있으며 음수의 값이 나오면 성적입력을 중단합니다.
3. while 구문을 사용하십시오. - 1번 문제에 등급을 표시하십시오.
문제조건:
1. 등급은 1-5등급으로 나뉩니다.
2. 90점 이상 1등급 80점 이상 2등급 70점 이상 3등급 60점 이상 4등급 이외 5등급
3. switch() 구문을 사용하십시오.
4. 이 외 나머지 조건은 1번 문제와 같습니다. - 수업시간에 사용하는 책에 있는 5-17번
문제를 다시 푸십시오.
문제조건:
1. 입력은 문자열로 받습니다.
2. 아스키 코드를 이용합니다.
3. 반복문을 사용합니다. - 자동차세를 구하는 프로그램을 작성하십시오.
문제조건:
1. 5000만원 이상의 경우 20%, 3000만원 이상의 경우 15%, 1000만원 이상의 경우 10% 나머지는 5%의 세금을 부과합니다.
2. 자동차 가격을 입력한 후, 자동차 이름을 입력 받고 자동차 이름은 국문 기준 10글자를 넘지 않습니다.(순서를 꼭 지키셔야 합니다. 자동차 가격 입력 후 자동차 이름 입력)
3. 입출력 예는 다음과 같습니다.
자동차 가격을 입력 하십시오 : <1000000>
자동차 이름을 입력 하십시오 : <소나타>
귀하의 자동차 '소나타'는 50000원의 세금이 부과됩니다.
*.<>부분은 사용자가 입력하는 부분입니다.
줄 바꿈 문자(Enter Key) 입력
시 '줄 바꿈 문자(Enter Key)가 입력되었습니다.'라고 출력하는 프로그램을 작성하십시오.
문제조건:
1.
scanf()이외 기타 함수를 쓰셔도 상관 없습니다.










