我正在编写一个程序,用户输入字符,单个每个字符,将每个字符转换为二进制,并计算每个二进制文件中的“1”的数量。到目前为止,我有一个工作代码。但是,每个二进制文件的输出顺序相反。像这样:
The character A = 10000010 1's = 2
当我想要/需要的是:
The character A = 01000001 1's = 2
我需要使用我已经拥有的函数数量,并且被告知修复它将像在我的binaryPrinter函数上进行递归一样简单。我很困惑我会在我的功能中做什么,以及我会发送什么参数。任何帮助都会很棒,谢谢。
P.S。我需要在binaryPrinter函数中使用递归来循环程序,如果我将它放在binaryPrinter函数的正确部分中,它显然将解决我的向后二进制问题。
#include <stdio.h>
#include <stdlib.h>
void binaryPrinter(int digitsLeft, int value, int * numberOfOnes);
void print(char c);
int charToInt(char C)
{
int c;
c=C;
return (int) c;
}
int main ()
{
char value;
int result = 1;
while (result != EOF)
{
result = scanf("%c", &value);
if (result != EOF)
{
print(value);
}
}
}
void print(char c)
{
int digits=8, value=c;
int ones=0;
printf("The character %c = ", c);
binaryPrinter(digits, value, &ones );
printf(" 1's = %d\n", ones);
}
void binaryPrinter(int digitsLeft, int value, int * numberOfOnes)
{
for (digitsLeft=8; digitsLeft>0; digitsLeft--)
{
if( value & 1 )
{
printf("1");
*numberOfOnes=*numberOfOnes+1;
}
else
{
printf("0");
}
value = value >> 1;
}
}
答案 0 :(得分:1)
这是递归版本。请注意,它会在打印任何内容之前进行递归,因此会在处理每个数字时进行打印,然后以正确的顺序打印它们。
void binaryPrinter(int digitsLeft, int value, int * numberOfOnes)
{
if (digitsLeft > 1) {
binaryPrinter(digitsLeft - 1, value >> 1, numberOfOnes);
}
if (value & 1) {
printf("1");
(*numberOfOnes)++;
} else {
printf("0");
}
}
答案 1 :(得分:0)
将循环更改为
for(digitsLeft = 1; digitsLeft&lt; = 8; digitsLeft ++)
答案 2 :(得分:0)
嗯,你正在查看相反顺序的数字:
if (value & 1) --> take the right-most digit
value = value >> 1; --> shift to the right
所以,如果你有
12345678
(是的,这不是位,这只是为了说明定位)输入,你正在做:
8,7,6,5,4,3,2,1
输出。您需要通过处理原始字符串中的左(最高)位来反转逻辑,然后向下工作到最低位。