#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代码的新手,所以也许我忽略了一些非常简单的东西,但是当我运行这段代码时,它并没有显示任何输出。而且我相信还有更多的错误本来可以简化。
#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]
(&=内存地址,字符串s的n元素;请注意数组启动来自元素0)char 0
与char '0'
不同,第一个是ascii表中的元素0,第二个是在ascii表中表示零的元素还有很多话要说,如果你不明白我的例子就问
您的代码有一些问题。
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
)。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];
。