c·c++/c 프로그래밍

두수의 비교

바로이순간 2013. 9. 13. 16:48

두수중 큰수를 출력하는 함수작성

조건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);

    }

}