죄송하지만 가장 기본적인 것 질문드립니다.. ( C - scanf() )

  • jss
    jss

    알고 스팟에서 문제를 풀다가 생긴 문제입니다.
    문제는 입력받은 숫자를 scanf 함수가 인트형 변수에 넣질 못합니다.
    계속 1이라는 숫자가 들어가네요. ( gdb 로 확인 해봄 )

    진짜 부끄러운데 제 소스도 같이 올립니다..
    리눅스에서 컴파일해서 실행해도 똑같이 나오네요..
    스샷

    cnt 라는 변수에 값이 안들어가고 있습니다..

    #include <stdio.h>
    #include <string.h>
    
    #define false 0
    #define true 1
    
    int toNumConvert(char *str);
    void toStringConvert(int n,char *str);
    int operation(int n1,int n2,char op);
    int checkAnswer(char *ans,int rs);
    
    int main(void){
        char num1[10];
        char num2[10];
        char op;
        char equal;
        char answer[10];
        int cnt;
        int rs;
    
        cnt = scanf("%d",&cnt);
        printf("cnt = %d\n",cnt);
        while(cnt>0){
    
            scanf("%s %c %s %c %s",num1,&op,num2,&equal,answer);
    
            rs=operation(toNumConvert(num1),toNumConvert(num2),op);
            printf("cehck answer : %d\n",checkAnswer(answer,rs));
    
            cnt--;
        }
    
    
        return 0;
    }
    
    int checkAnswer(char *ans,int rs){
        char corrAns[10];
        int i,j;
        int cursor=0;
        int len=0;
        toStringConvert(rs,corrAns);
        len = strlen(corrAns);
    //  printf("correct Answer : %s \n",corrAns);
        for(i = 0 ; i <len ; i++ ){
            for(j=0;j<len;j++){
                if(corrAns[i]==ans[j]){
                    ans[j]='!';
                    break;
                }
            }
    
        }
        for(i=0;i<len;i++){
                if(ans[i]=='!'){
                    cursor++;
                }
        }
        return cursor==len?1:-1;
    
    }
    
    
    
    int operation(int n1,int n2,char op){
        int rs=0;
    
        switch(op){
            case '+': rs= n1+n2;
                      break;
            case '-': rs=n1-n2;
                      break;
            case '*': rs=n1*n2;
                      break;
            default :
                      break;
    
        }
        return rs;
    }
    
    
    void toStringConvert(int n,char *str){
    //  char answ[10];
    
        switch(n){
            case 0 : strcpy(str,"zero");
                     break;
    
            case 1 : strcpy(str,"one");
                     break;
            case 2 : strcpy(str,"two");
                     break;
            case 3 : strcpy(str,"three");
                     break;
            case 4 : strcpy(str,"four");
                     break;
            case 5 : strcpy(str,"five");
                     break;
            case 6 : strcpy(str,"six");
                     break;
            case 7 : strcpy(str,"seven");
                     break;
            case 8 : strcpy(str,"eight");
                     break;
            case 9 : strcpy(str,"nine");
                     break;
            case 10 :strcpy(str,"ten");
                     break;
            default : 
                     break;
    
        }
    //  strcpy(str,answ);
    
    }
    
    
    int toNumConvert(char *str){
    
        if(strcmp(str,"zero")==0){
            return 0;
        }else if(strcmp(str,"one")==0){
            return 1;
        }else if(strcmp(str,"two")==0){
            return 2;
        }else if(strcmp(str,"three")==0){
            return 3;
        }else if(strcmp(str,"four")==0){
            return 4;   
        }else if(strcmp(str,"five")==0){
            return 5;   
        }else if(strcmp(str,"six")==0){
            return 6;   
        }else if(strcmp(str,"seven")==0){
            return 7;   
        }else if(strcmp(str,"eight")==0){
            return 8;   
        }else if(strcmp(str,"nine")==0){
            return 9;   
        }else if(strcmp(str,"ten")==0){
            return 10;  
        }else{
            printf("numConever error!! \n");
            return -1;
        }
    }
    

    9년 전
2개의 댓글이 있습니다.
  • Being
    Being

    cnt = scanf("%d",&cnt); 라고 하시면 1이 들어가는 것이 정상입니다. scanf()가 계산되고 난 뒤 그 되돌려진 값이 cnt 변수에 들어가겠죠.


    9년 전 link
  • jss
    jss

    정말 바보같은 실수를..-_-;; 감사합니다.


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.