簡體   English   中英

c 邏輯錯誤中的二進制到十進制轉換器

[英]Binary to decimal converter in c logic error

我試圖在 c 中制作二進制到十進制轉換器。 但現在輸出的是一個隨機數。 在我嘗試之前,它曾經適用於由全 1 組成的二進制文件。 例如,當我輸入 111 時,它曾經給我 7。但是當我輸入 10 或 011 或其他任何東西時,它給了我一些隨機數。 現在它給了我一個 memory 位置。 請幫忙。 我嘗試使用在線編譯器。

 #include <stdio.h>
 #include<math.h>

 int main() {

int i=1, b[100];
char ch;
int decimal=0;
printf("enter binary\n");
ch=getchar();
while(ch!='\n'){
    ch=ch-'0';
    b[i]=ch;
    i++;
    ch=getchar();
}
i=i-1;
while(i>=0){
    decimal=(b[i]*((int)pow(2,i))) + decimal;
    i--;
}
printf("%d",(int)decimal);
return 0;
}

上面的評論建議將i初始化為0而不是1 你絕對需要這樣做。

但是您也可以通過不使用它並在另一個方向上迭代您的數組來避免pow function 的歷史錯誤。 它使您能夠留在 integer 空間中,而不必進行投射。 詳情在這里

而不是這個:

while(i>=0){
    decimal=(b[i]*((int)pow(2,i))) + decimal;
    i--;
}

這個:

for (int j = 0; j < i; j++) {
    decimal = decimal * 2 + b[j];
}

正如評論指出的那樣,可能將 i 初始化為 0 會降低使用 i 作為索引的復雜性。 因此數組中不會有空閑的 b[0] 。 它還有助於通過 for 循環產生 2 的冪,大多數情況下使用 pow function 可能會導致一些不需要的轉換行為,尤其是在不需要雙類型 output 時。

試試這種求和方法:

for (int j=0 ; j<i ; j++){
    decimal *=2 ;
    decimal += b[j] ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM