鱼C论坛

 找回密码
 立即注册
查看: 1130|回复: 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


小甲鱼最新课程 -> https://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`。

我来修正并解释这段代码:

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>

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

  8.     while (x)
  9.     {
  10.         arr[length] = x % 2;
  11.         x /= 2;
  12.         length++;
  13.     }

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

  20. int main(void)
  21. {
  22.     int b;
  23.     printf("Input an integer number\n");
  24.     scanf("%d", &b);
  25.     tenTotwo(b); // 正确调用函数
  26.     system("pause"); // windows系统下暂停程序
  27.     return 0;
  28. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://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 的数值。
        请参考下面的代码加深理解:
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         char c = 65        ; // 字符 'A' 的 ASCII 编码为 65
  5.         printf("%d\n" , c) ; // 输出数值 65
  6.         printf("%c\n" , c) ; // 输出字符 'A', ASCII 编码 65 的字符是 'A'      
  7.         c = 'c'            ; // 字符 'c' 的 ASCII 编码为 99
  8.         printf("%d\n" , c) ; // 输出数值 99,字符 'c' 的 ASCII 编码为 99
  9.         printf("%c\n" , c) ; // 输出字符 'c'               
  10. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 12:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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