프로그래밍

 3198, 1/160 회원가입  로그인  
   psh34
   [C]도와주세요ㅠ 함수는 미리 주고 main만 완성하는 문제인데

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2983 [복사]


함수는 주어져있는데

이 코드의 완성이 어렵습니다.

어휘 분석기랑 같은데

이것은 char=str[20]="526"; 뭐 이런식으로 숫자를 문자열로 받아서 밑에 함수로 돌리면

상수로 반환하게 하라는 그런 내용이었습니다만...

암만 해도 안되네요...

결과가

(출력은 printf()함수를 %d로)만약 10진수 526을 넣으면 526, 8진수 030을 넣으면 030이 10진 정수형으로 출력이니 24 이런식으로 나오게 하라는게 요점인데

함수 호출하고 출력하는데 자꾸 숫자가 한개만 나옵니다.

교수님은 첫번째거만 넘겨주면 알아서 해주니 함수부분은 신경쓰지말라는데...for도 필요없다고 하시고...

어떻게 해야할까요

아무리 해도 안되고 교수님도 뚜렷한 방향도 제시해주지 않고 다른 학생한테 물어보라고해서 어쩔 수 없이 도움을 요청해봅니다. 부탁드립니다ㅠㅠ

#include <stdio.h>
#include <ctype.h>


int getIntNum(char firstCharacter);
int hexValue(char ch);

void main()
{
        char index[10];
        char a;
        int ddd;
        
        scanf("%s",index);
        a=*index;
//        fgets(index,sizeof(index),stdin);
        
        ddd=getIntNum(a);
        printf("%d\n",ddd);
                
                
}


int getIntNum(char firstCharacter)
{
    int num = 0;
    int value;
    char ch;
    if (firstCharacter != '0')
    {
        ch = firstCharacter;
        do
        {
            num = 10*num + (int)(ch-'0');
            ch = getchar();
        }while(isdigit(ch));
    }
    else
    {
        ch = getchar();
        if((ch>='0')&&(ch <='7'))
            do
            {
                num = 8*num + (int)(ch-'0');
                ch = getchar();
            }while((ch>='0')&&(ch <='7'));
            else if ((ch == 'X') || (ch=='x'))
            {
                while((value = hexValue(ch=getchar())) != -1)
                    num = 16 * num + value ;
            }
            else num = 0;
    }
    ungetc(ch , stdin);
    return num;
}
int hexValue(char ch)
{
    switch(ch){
    case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':
        return (ch - '0');
    case 'A':case 'B':case 'C':case 'D':case 'E':case 'F':
        return (ch - 'A'+10);
    case 'a':case 'b':case 'c':case 'd':case 'e':case 'f':
        return (ch - 'a'+10);
    default:
        return -1;
    }
}

  Hit : 4650     Date : 2011/05/05 11:11



    
clockmaker 살펴보지는 않았는데요
main 함수에 fgets는 왜 주석처리 하신 거죠?
주석 같이 안 생겼는데요. 그거 한 번 지워보세요
2011/05/06  
psh34 주석처리가 맞습니다. 주석처리 한 이유는 처음에 fgets였는데 scanf로 걍 해봣어요

아무튼 진짜 애매하네요. 다른분들한테도 알아보는데 함수를 수정해야한다는 분도 계시네요

저상태에서는 이루어질수 없을까요
2011/05/06  
Prox 음 대충살펴봤는데요 (이해하려고 해보진않고 ㅎ)

int getIntNum(char firstCharacter) <- 문자 하나를 넘겨받고
{
int num = 0;
int value;
char ch;
if (firstCharacter != '0')
{
ch = firstCharacter;
do
{
num = 10*num + (int)(ch-'0');
ch = getchar(); <- 루프안에서 getchar를 호출하는데
}while(isdigit(ch));
}
else
{
ch = getchar();
if((ch>='0')&&(ch <='7'))
do
{
num = 8*num + (int)(ch-'0');
ch = getchar();
}while((ch>='0')&&(ch <='7'));
else if ((ch == 'X') || (ch=='x'))
{
while((value = hexValue(ch=getchar())) != -1)
num = 16 * num + value ;
}
else num = 0;
}
ungetc(ch , stdin);
return num;
}

힌트는 "교수님은 첫번째거만 넘겨주면 알아서 해주니 함수부분은 신경쓰지말라는데...for도 필요없다고 하시고..."

그렇다면.. 첫글자로 무얼 넘겨주면, 루프안에서 getchar로 글자를 받아오면서
무슨 일인가를 한다는말인데......

int getIntNum(char firstCharacter) <- 캐릭터하나 넘겨주고
..
ch = firstCharacter; <- 그게 ch에 저장되고
..
if((ch>='0')&&(ch <='7')) <- 이런 비교문도있고
..
else if ((ch == 'X') || (ch=='x')) <- 이런 비교문도 있네요 ^^

이이상은 스스로 해석하려고 해보세요
2011/05/06  
clockmaker 메인함수만 완성하면 되는 거죠?
함수를 수정할 필요 전혀 없고요. 가볍게 이 정도 하면 되겠네요. 흠

int main() {
char ch;
int forPrint;

printf("input : ");
scanf("%c" , &ch);

forPrint = getIntNum(ch);
printf("answer : %d", forPrint);
}
2011/05/06  
clockmaker 이 게시판은 들여쓰기가 안 되는군요;; 별로 길진 않으니 상관 없겠죠 ㅎㅎ

생각해 볼 점은 scanf가 %c로 받는 것과,
getIntNUm 함수가 넘겨 받는 게 'firstCharacter'라는 점 정도입니다.
변수 이름은 괜히 짓는 게 아니죠 ㅇ_ㅇ
string 통째로 넘겨줘야 할까요 charcter 하나를 넘겨줘야 할까요??
2011/05/06  
psh34 아;;; 한개만 주면 된다는게 string통째가 아니라 맨앞에 한개만 보내면 된다는거였군요;;

감사합니다 덕분에 풀어냈습니다.ㅠㅠ
2011/05/09