鱼C论坛

 找回密码
 立即注册
查看: 423|回复: 2

十进制转换二进制的输出问题

[复制链接]
发表于 2024-9-22 21:32:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 八义士 于 2024-9-22 21:34 编辑

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char arr[100];

void tenTotwo(int x)
{
        int length = 0;
        while (x)
        {
                arr[length++]=x%2;
                x /= 2;
        }
        for (int i = length - 1; i >= 0; i--)
                printf("%d", arr[i]);
}
int main(void)
{
       
        int b;
        printf("input a integer num\n");
        scanf("%d",&b);
        tenTotwo(b);
        system("pause");
        return 0;
}
函数输出是为什么是%d,而不是%c


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-22 21:32:55 | 显示全部楼层
你所描述的问题及代码有多个错误,我会逐步指出并修改以确保其能够正确运行,同时回答你的问题。

首先,修改代码中存在的问题和错误:

1. 编译器警告 `_CRT_SECURE_NO_WARNINGS` 通常用于禁用某些安全性的编译器警告,对于此示例可以忽略不处理。
2. `#include` 没有指定头文件,应该补上 `<stdio.h>` 和 `<stdlib.h>`.
3. `char arr;` 应该定义成一个数组来存储二进制位,不然数组越界。
4. `tenTotwo` 函数中计算二进制时,没有增加 `length` 的值。
5. `for` 循环中的 `arr` 应该是数组,不是单个字符。
6. `tenTotwo(int x)` 在 `main` 函数中的调用不正确。
7. 问题出在输出二进制位时需要使用 `%d` 来输出整型数值,而不是 `%c`。

我来修正并解释这段代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void tenTotwo(int x)
{
    int arr[32]; // 定义一个数组来存储二进制位,32位足够表示所有的int
    int length = 0;

    while (x)
    {
        arr[length] = x % 2;
        x /= 2;
        length++;
    }

    for (int i = length - 1; i >= 0; i--)
    {
        printf("%d", arr[i]); // 这里使用 %d 因为我们输出的是整数
    }
    printf("\n");
}

int main(void)
{
    int b;
    printf("Input an integer number\n");
    scanf("%d", &b);
    tenTotwo(b); // 正确调用函数
    system("pause"); // windows系统下暂停程序
    return 0;
}

解释关键点:
1. 使用整型数组存储每一位二进制数,因为 `char` 类型会导致错误。
2. `length` 用来记录数组中存储了多少个二进制位。
3. 用 `%d` 输出是因为我们存储的二进制位实质上是整型数值 0 或 1,不是字符。

这样修改后,程序就能够正确把十进制整数转换为二进制,并且按正确顺序输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-23 10:54:31 | 显示全部楼层
本帖最后由 jackz007 于 2024-9-23 23:44 编辑

        计算机用编码来表达字符,ASCII 编码的范围为 0 - 127,分别代表 128 个不同的 ASCII 字符,所以,可以说,字符就是数字。
        例如,当以 "%c" 来输出变量 v 时,那是需要按字符的形式输出 ASCII 编码为 v 的字符;当以 "%d" 来输出变量 v 时,那是需要按十进制整数的形式输出 v 的数值。
        请参考下面的代码加深理解:
#include <stdio.h>

int main(void)
{
        char c = 65        ; // 字符 'A' 的 ASCII 编码为 65
        printf("%d\n" , c) ; // 输出数值 65
        printf("%c\n" , c) ; // 输出字符 'A', ASCII 编码 65 的字符是 'A'       
        c = 'c'            ; // 字符 'c' 的 ASCII 编码为 99
        printf("%d\n" , c) ; // 输出数值 99,字符 'c' 的 ASCII 编码为 99
        printf("%c\n" , c) ; // 输出字符 'c'               
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 15:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表