두수중 큰수를 출력하는 함수작성
조건1. 'x'를 입력하기전까지 무한반복
조건2. 입력값이 정수가 아니면 다시 입력
조건3. 비교하는 부분은 함수활용
#include <stdio.h>
// 0이상의 수만 입력한다고 가정하고 풀어본 것입니다.
int compare(char a[], char b[]) {
int ia=0, ib=0;
// 문자열의 끝이 나올때 까지 ia값을 증가시킨다.
// a문자열의 길이는 ia가 된다.
while(a[ia]!=0) { ia+=1; }
// b문자열의 길이는 ib가 된다.
while(b[ib]!=0) { ib+=1; }
// a로 나타낸 수가 b로 나타낸 수보다 크다면 1을 반환
if(ia>ib) { return 1; }
// a로 나타낸 수가 b로 나타낸 수보다 작다면 -1을 반환
if(ia<ib) { return -1; }
// 여기까지 오게되면, ia와 ib는 같다.
ia=0;
// a와 b의 수자가 같다면 계속해서 다음 위치로 간다.
// 만약 끝까지 같다면 a와 b는 같다.
// 같지 않은 수자를 발견하면 while문이 끝이 난다.
while(a[ia]!=0 && a[ia]==b[ia]) { ia+=1; }
if(a[ia]>b[ia]) { return 1; }
if(a[ia]<b[ia]) { return -1; }
return 0;
}
int readnum(char a[]) {
int i=0, x=1;
char c;
i=1;
while(1) {
c=getchar();
if(c==' '||c=='\n') { break; }
if(c<'0' || '9'<c) {
x=0;
break;
}
a[i]=c;
i+=1;
}
a[i]=0;
// 0으로 시작하고 길이가 1보다 크면 다시 입력하도록 요구함.
if(a[0]=='0' && i>1) { x=0; }
return x;
}
int main() {
char a[100], b[100];
char c;
int ia, ib, k, n=0, x;
while(1) {
// 문자를 한개 읽는다.
c=getchar();
// 만약 개행 문자 혹은 빈칸이라면 다시 읽는다.
if(c=='\n'||c==' ') { continue; }
// 만약 x라면 종료한다.
if(c=='x') { break; }
// 수자라면 계속해서 수를 읽는다.
if('0'<=c&&c<='9') {
if(n==0) {
a[0]=c;
k=readnum(a);
} else {
b[0]=c;
k=readnum(b);
}
// 수가 아닌 문자가 입력되었다면, 다시 입력하라는 메시지를 출력한다.
} else {
k=0;
}
// 만약 문자를 입력했다면
if(k==0) {
// 남아 있는 모든 문자들을 버리고, 다시 입력받는다.
fflush(stdin);
printf("다시입력: ");
continue;
} else {
// 성공적으로 입력을 받았다.
// 2개를 입력받아야 비교를 하고 큰수를 출력한다.
n+=1;
}
if(n==2) {
n=0;
x=compare(a, b);
if(x==0) {
printf("두수가 같습니다.\n");
} else if(x>0) {
printf("큰수 %s\n", a);
} else {
printf("큰수 %s\n", b);
}
}
}
return 0;
}
=====================================================================
두번째 버전입니다.
#include <stdio.h>
int input_func();
void comp_func (int x,int y);
int main() {
int a, b; char k;
printf("두수 비교 프로그램을 시작합니다\n");
while(1) {
a=input_func();
b=input_func();
comp_func(a,b);
printf("종료하려면'x'를 눌러주세요\n");
scanf(" %c",&k); // 빈칸 1개가 필요함.
if(k=='x') break;
}
return 0;
}
int input_func() {
int i, n=0, x;
while(1) {
i=scanf("%d", &n);
x=getchar();
if(i==1&&(x=='\n'||x==' ')) { break; }
fflush(stdin);
printf("다시입력: ");
}
return n;
}
void comp_func(int x, int y) {
if(x>y) {
printf("큰수: %d\n", x);
} else {
printf("큰수: %d\n", y);
}
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
3x3 행렬식(determinant) 구하기 (0) | 2013.09.15 |
---|---|
Hadamard 행렬구하기 (0) | 2013.09.15 |
Cramer공식을 이용한 연립방정식풀기 (0) | 2013.09.13 |
자리수 제한없이 피보나치수열 구하기 (0) | 2013.09.13 |
어셈블리 리스팅 보기 vc++과 gcc(MinGW)의 경우 (0) | 2013.09.12 |