在 C 语言中将十进制转换为二进制

3

我的简单程序无法将7转换为111(当前代码会给出101)。我知道myArray []和最后一个printf()可以改进,但我们可以在下次讨论。

int main() {
    int myDecimal, quo, rem;
    int i = 0; //counter
    int myArray[3];
    printf("Enter valid decimal number: ");
    scanf("%d", &myDecimal);

    while(quo != 1){
        quo = myDecimal / 2;
        rem =  myDecimal % 2;

        myArray[i] = rem;
        myDecimal = quo;
        i++;
    } myArray[i] = quo;

    printf("\nBinary: %d %d %d", myArray[i + 2], myArray[i + 1], myArray[i] );  
    return 0;
}

7
无关的提示,quo应该被初始化为某个值,以防万一内存中的垃圾值是1。我现在正在查看代码的其余部分... - starlight
2
循环结束时,i 的值是多少? - Some programmer dude
你有包含 stdio.h 吗?当我运行代码时,它能正常工作。 - starlight
1
@ReiAllenPhillipRamos 是的,那么 i + 1(和 i + 2)不就会越界了吗? - Some programmer dude
1
最后一个与你的问题无关的注意事项是,在使用printf打印时不要使用前导换行符。stdout文件流(printf写入的内容)默认情况下是“行缓冲”的。这意味着只有在字符串中出现换行符时,输出才会实际被写入。如果你在开头加上换行符,你将打印出之前的输出,而当前printf调用的输出将不会被打印。养成在printf调用中始终具有尾随换行符的习惯。 - Some programmer dude
显示剩余11条评论
3个回答

0

对我来说它工作得很好。你是否正确包含了头文件?你正在使用哪个编译器?

#include <stdio.h>
#include <conio.h>

int main() {
    int myDecimal, quo, rem;
    int i = 0; //counter
    int myArray[3];
    printf("Enter valid decimal number: ");
    scanf("%d", &myDecimal);

    while(quo != 1){
        quo = myDecimal / 2;
        rem =  myDecimal % 2;

        myArray[i] = rem;
        myDecimal = quo;
        i++;
    } myArray[i] = quo;

    printf("\nBinary: %d %d %d", myArray[i + 2], myArray[i + 1], myArray[i] );
    return 0;
}

输出

enter image description here

我也试过这个。如果你想的话,你也可以试试看 :)

#include <stdio.h>
#include <conio.h>

int main() {
    long myDecimal;
    long binary = 0, i = 1;
    int rem;
    printf("Enter valid decimal number: ");
    scanf("%d", &myDecimal);

    while(myDecimal != 0) {
        rem = myDecimal%2;
        myDecimal = myDecimal/2;
        binary= binary + (rem*i);
        i = i*10;
    }
    printf("Binary number is %ld",binary);
}

0

有一些错误需要处理。

  1. 初始化数组,因为在转换1时,可能是垃圾0 1
  2. 不要强制 myArray[i] = quo;
  3. 应注意打印输出,因为i的长度可能不同,可能导致不稳定的行为。
  4. 在使用前也要初始化 quo,否则可能会导致垃圾比较。
  5. 同时遵循注释中的提示,它们很有用。

    int main() {
    int myDecimal, quo, rem;
    int i = 0; //计数器
    int myArray[3] = {0};
    printf("输入有效的十进制数: \n");
    scanf("%d", &myDecimal);
    quo = myDecimal;
    while(quo > 0){
        quo = myDecimal / 2;
        rem =  myDecimal % 2;
    
        myArray[i] = rem;
        myDecimal = quo;
        i++;
    } 
    printf("二进制: %d %d %d", myArray[2], myArray[1], myArray[0]);  
    return 0;
    }
    

0

根据你的逻辑,你需要做一些小改动才能让它正常工作。

check.c

#include<stdio.h>

int main() {
int myDecimal, quo, rem;
int i = 0; //counter
int myArray[3];
printf("Enter valid decimal number: ");
scanf("%d", &myDecimal);
//check myDecimal whether it's above 0 after each iteration
while(myDecimal > 0){
    quo = myDecimal / 2;
    rem =  myDecimal % 2;

    myArray[i] = rem;
    myDecimal = quo; 
    i++;
} myArray[i] = quo;
//print the array in the reverse order
for(i=2;i>=0;i--){
printf("%d",myArray[i]);
}  
printf("\n");
return 0;
}

输出: 在此输入图像描述


请问有没有一些好的编程笑话或者搞笑的程序员故事可以分享?我想让我的团队在工作之余放松一下,同时也能够增强我们的团队凝聚力。谢谢! - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接