为什么这个功能给出意想不到的结果

时间:2014-03-27 15:37:03

标签: c

我正试图合作 所以,我不明白我的编译器在从main调用convhex()时不让我输入的原因。它直接打印了一些结果..我不明白这一点。 这是代码..

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <String.h>
void convhex();
void convert(int no, int base);
int checkValid(int base,int no);
// function prototyping done here

void convhex()
{
    char ch[10];
    int dec=0;
    int i, res;
    printf("Enter the hexadecimal number \n");
    scanf("%[^\n]", ch);

    // print in decimal
    for(i=strlen(ch)-1;i>=0;i--)
    {
        if(ch[i]>65)
            res=ch[i]-65+10;
        else
            res=ch[i]-48;
        //printf("%d", res);
        dec=dec+pow(16,strlen(ch)-(i+1))*res;
    }
    printf("\nThe number in decimal is %d \n", dec);
}
int checkValid(int base,int no)
{
    int rem;
    //flag;
//    flag=0;
    while(no>0)
    {
        rem=no%10;
        if(rem>base)
        {
            //flag=1;
            //break;
            return 0;
        }
        no/=10;
    }
    return 1;
    /*
    if(flag==1)
        printf("Invalid Input");
    else
        printf("Valid Input");
        */
}

void convert(int no, int base)
{
    int temp, mod, sum=0, i=0;
    temp=no;
    while(temp>0)
    {
        mod=temp%10;
            temp=temp/10;
            sum=sum+pow(base,i)*mod;
        i++;
    }
    printf("\n The number in base 10 is %d", sum);
}
int main()
{
    int base, no;
    printf("Enter the base \n");
    scanf("%d", &base);
    if(base==16)
        convhex();
    else
    {
        printf("Enter the number \n");
        scanf("%d", &no);
        printf("You have entered %d", no);
        if(checkValid(base, no))
        convert(no, base);
    }


    return 0;
}

// up until now our program can work with any base from 0-10 but not hexadecimal
// in case of hex, we have A-F

2 个答案:

答案 0 :(得分:0)

scanf中的

convhex正在阅读\nscanf留下的main。 试试这个

scanf(" %[^\n]", ch);  
        ^ An extra space will eat any number of white-spaces.

答案 1 :(得分:0)

您可以从%[^\n]中的scanf移除connhex,将其更改为:

scanf("%s", ch)

或者你可以做上面帖子中提出的haccks。