2014-03-27 68 views
-1

我試圖聯合 所以,我不明白爲什麼我的編譯器是不是讓我接受輸入時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 
+0

你的編譯器說什麼? – HAL

+0

它在命令提示符下顯示如下: http://puu.sh/7Lwa8.png – Xavier

+0

'scanf(「%[^ \ n]」,ch);' – BLUEPIXY

回答

0

scanfconvhex被讀取由scanfmain離開\n
試試這個

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

向下選民,評論,將不勝感激? – haccks

+0

'scanf'與正則表達式無關。 –

+0

@YvesDubois;我不這麼認爲。 – haccks

0

你可以從scanf刪除%[^\n]connhex將其改爲:

scanf("%s", ch) 

,或者你可以做什麼haccks在上面的帖子建議。

+0

您可能想要解釋*爲什麼*,但這種修復方法比使用'[^ ​​\ n]'更有意義。 – Mike

+0

'%'轉換放棄了輸入中的初始「空格」 –

相關問題