我試圖在 c 中制作一個二進制到十進制轉換器。但是現在的輸出是一個亂數。在我嘗試之前,它曾經適用于由全 1 組成的二進制檔案。例如,當我輸入 111 時,它曾經給我 7。但是當我輸入 10 或 011 或其他任何東西時,它會給我一些亂數。現在它給了我一個記憶位置。請幫忙。我嘗試使用在線編譯器。
#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;
}
uj5u.com熱心網友回復:
正如評論指出的那樣,將 i 初始化為 0 可能會降低使用 i 作為索引的復雜性。因此,陣列中不會有空閑的 b[0]。它也有助于通過 for 回圈產生 2 的冪,大多數情況下使用 pow 函式可能會導致一些不需要的轉換行為,尤其是當不需要雙型別輸出時。
試試這個求和方法:
for (int j=0 ; j<i ; j ){
decimal *=2 ;
decimal = b[j] ;
}
同樣為了獲取二進制數,它會詢問用戶數字的長度,然后使用 scanf("%s",b) 來避免逐字符輸入。
uj5u.com熱心網友回復:
上面的評論建議初始化i為0而不是1. 你肯定需要這樣做。
但是您也可以pow通過不使用該函式并在另一個方向迭代您的陣列來避免該函式的歷史錯誤。它使您能夠停留在整數空間中并避免強制轉換。詳情請看這里。
取而代之的是:
while(i>=0){
decimal=(b[i]*((int)pow(2,i))) decimal;
i--;
}
這個:
for (int j = 0; j < i; j ) {
decimal = decimal * 2 b[j];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368645.html
上一篇:MIPS中的嵌套回圈演示
