2016-07-09 12 views
0

は、ここでは、2のscanf()を持っており、1の後にいくつかの文字が読み取り残されているコードなぜ私のscanf for char変数がコードブロックで実行中に値を受け入れないのですか?

//WAP in Co convert a binary or octal to a decimal number depending on user choice. 
#include <stdio.h> 
#include <math.h> 
int conversion(int number,int base); 
int main(void){ 
    int number,base,decimal; 
    char choice; 
    printf("Enter the number:"); 
    scanf("%d",&number); 
    printf("Enter 'b' for binary or 'o' for octal:"); 
    scanf("%c",&choice); //Problem occuring here 
    if(choice=='b') 
     base=2; 
    base=8; 
    decimal=conversion(number,base); 
    printf("Decimal number:%d",decimal); 
    return 0; 
} 

int conversion(int number,int base){ 
    int reminder; 
    int decimal=1; 
    int i=0; 
    while(number>=0){ 
     reminder=number%base; 
     decimal=(decimal*reminder)*pow(base,i); 
     number/=10; 
     i++; 
    } 
    return decimal; 
} 
+1

問題は何ですか?あなたの問題は、ユーザーが選択肢を入力するのを待たずに2番目のscanfですか? – sps

+0

問題は、値が2番目のscanfでキーボードから受け入れられないということです。 –

+0

'scanf("%c "、&choice)' - > 'scanf("%c "、&choice);' – BLUEPIXY

答えて

1

です。条件付きループはそれが10、最低で正の数をloop.Dividing無限に行くなりながら、あなたはそれはあなたが持っている変換関数の内部で、次の入力

printf("Enter 'b' for binary or 'o' for octal:"); 
getchar(); 
scanf("%c",&choice); 

を取る必要があります)(次SCAF前にgetchar関数を()を使用することができます次のコードを使用してください:

while(number>0) 

また、2番目の入力が無駄である場合は、条件がある場合。とにかくベースに8を割り当てるからです。