#include "stdafx.h"
int main()
{
int num = 11, i = 10;
char s[10];
while (num != 0)
{
if (num % 2 == 0)
{
num = num / 2;
s[i - 1] = 0;
i = i - 1;
}
if (num % 2 == 1)
{
num = (num - 1) / 2;
s[i - 1] = 1;
i = i - 1;
}
return s[10];
}
printf("\n %s", s[10]);
getchar();
return 0;
}
嗨,我对C代码很陌生,所以也许我会忽略一些非常简单的东西,但是当我运行这段代码时,它并没有显示任何输出。而且我相信还有更多的错误本来可以简化。
答案 0 :(得分:0)
if (num % 2 == 0)
{
num = num / 2;
s[i - 1] = 0;
i = i - 1;
}
if (num % 2 == 1)
{
num = (num - 1) / 2;
s[i - 1] = 1;
i = i - 1;
}
除了在这些语句之后立即返回(导致程序立即退出),在此处将s
的字符设置为'\ 0'或'\ 1'。它们都不可打印;此外,'\ 0'表示字符串结束。将文字0
和1
更改为相应的'0'
和'1'
。
此外,您需要将一个零字符('\0'
)放入s
以终止该字符串,并增加s
的大小以适应该额外字符。最简单的方法是将s
初始化为从开始的所有零:char s[11] = {'\0'};
。
从循环体中删除return s[10];
。
答案 1 :(得分:0)
您的代码存在一些问题。
while
循环中的指令只执行一次,然后程序退出,因为您在循环结束时调用return s[10]
。从main
返回有效退出该计划。%s
printf令牌需要一个字符串,其中c只是一个char的数组(char *或char []),但你传递一个char(s [10] )。如果您想打印s
,请使用printf("%s\n", s);
char s[11]
。然后设置s[10] = '\0';
并使用0-9索引修改构成字符串的所有其他字符。'1'
和'0'
)而不是整数(不是1
和0
)。答案 2 :(得分:0)
#include <stdio.h>
int main()
{
int num = 11, i = 0, j = 0;
char s[33];
char be_s[33];
do
{
s[i] = num % 2 ? '1' : '0';
num = num / 2;
i++;
} while (num != 0);
s[i] = '\0';
printf("Little endian number: %s\n",s);
for(j = 0 ; j < i ; j++)
{
be_s[j] = s[(i - 1) - j];
}
be_s[j] = '\0';
printf("Big endian number: %s\n",be_s);
return 0;
}
正如有人已经解释过你有多个问题:
s
,或者如果你想从元素n
开始读取字符串,你可以使用&s[n - 1]
(&amp; =内存地址) ,字符串s的n个元素;请注意,数组从元素0开始char 0
与char '0'
不同,第一个是ascii表中的元素0,第二个是元素表示零在ascii表中还有很多话要说,如果你不理解我的例子,只要问