gpt4 book ai didi

c - 输入大于 127 的数字时打印出乱码

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:54 24 4
gpt4 key购买 nike

我尝试编写一个程序,将十进制数打印为二进制数。如果我输入大于 127 的数字,则会打印出垃圾。如何修复这个错误?

问题出现在下面一行:

printf("%s\n", bits);

可能函数 print_decimal_number_binary(int) 不正确。我知道在打印出来之前我实际上必须反转二进制字符串,我会在修复错误后实现它。

非常感谢您的宝贵意见!

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 1

void print_decimal_number_binary(int number)
{
char bits[sizeof(int) * 8 + 1];
int index = 0;

if (number == 0)
{
printf("0\n");
return;
}

while (number > 0)
{
if (number % 2 == 0)
{
bits[index] = '0';
}
else
{
bits[index] = '1';
}
number = number / 2;
index++;
}

printf("%s\n", bits);
}

int main(void)
{
printf("This program only works for positive integers.\n\n");
while (TRUE)
{
// display main menue and get choice
printf("[1] decimal to binary\n");
printf("[2] binary to decimal\n");
printf("[0] leave program\n");
printf("Input: ");
char main_menue_choice;
fflush(stdin);
scanf(" %c", &main_menue_choice);
printf("\n");

// handle user input
if (main_menue_choice == '1')
{
printf("number: ");
int number;
fflush(stdin);
scanf(" %i", &number);
printf("\n");
print_decimal_number_binary(number);
}
else if (main_menue_choice == '2')
{
printf("number: ");
char number_string[sizeof(int) * 8 + 1];
fflush(stdin);
scanf(" %s", &number_string);
printf("\n");
print_binary_number_decimal(number_string);
}
else if (main_menue_choice == '3')
{
break;
}
else
{
printf("Enter a valid argument!");
}

printf("\n");
}
}

最佳答案

你有未定义的行为,因为你这样做:

  • fflush(标准输入)
  • 没有以零结尾的 bits 数组,您稍后会将其打印为字符串。

做:

char bits[sizeof(int) * 8 + 1] = {0};

用零初始化整个数组 bits(因此它自然会有 bits 的零终止符)并摆脱所有 fflush(stdin) 来电; fflush 仅针对标准 C 中的输出流定义。

您也不需要格式字符串中的前导空白来扫描整数 (%i) 和字符串 (%s),因为它们已经忽略了前面的空白-空格。

并将 & 放在这里:

scanf(" %s", &number_string);

number_string 在传递给 scanf 时已经衰减为 char*,这正是 scanf 的期望>%s。您当前传递给 scanf 的是 char (*)[33] 类型,这对于 %s 是错误的。

关于c - 输入大于 127 的数字时打印出乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com