[英]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.