请给我一些关于如何使我的代码更好或更有效的反馈。它应该将十进制整数转换为二进制。
#include <stdio.h>
binarydigits(int div, int dis)
{
int numit;
numit=0;
do
{
++numit;
div /= dis;
}
while (div!=1);
++numit;
return numit;
}
main()
{
int x, nb, i;
printf("\n Input an decimal integer number to be converted: ");
scanf("%d", &x);
fflush(stdin);
if (x==0 || x==1)
{
printf("\n\n %d in binary : %d", x, x);
}
else
{
printf("\n\n %d in binary : ", x);
nb = binarydigits(x, 2);
// the function 'binarydigits' returns how many binary digits are needed to represent 'x'
int remind[nb];
// an array of 'nb' elements is declared. Each element of this array will hold a binary digit
for(i=(nb-1) ; i>=0 ; --i, x/=2)
{
remind[i] = x%2;
}
//this 'for' structure saves the remainder of 'x/2' (x%2) in an element of the 'remind[nb]' array
for (i=nb ; i>0 ; --i)
{
printf("%d", remind[nb-i]);
}
//this 'for' structure prints the elements of the 'remind[nb]' array in increasing order
}
getch();
return 0;
}
如何改善这一点的任何提示都会很好。
答案 0 :(得分:1)
首先,binarydigits
应该有一个返回类型int
。这是因为您在此函数末尾返回一个整数变量numit
。将您的函数标题更改为:
int binarydigits(int div, int dis)
其次,main()
函数需要在C和C ++中定义返回类型int
。没有它,您的编译器将产生一个警告,类似于:
main.c:18:1: warning: return type defaults to 'int' [-Wimplicit-int] main() ^~~~
以下是关于main()
函数定义的 C11标准(ISO / IEC 9899:2011)的摘录:
程序启动时调用的函数名为
main
。该实现声明此函数没有原型。它应定义为返回类型int
且没有参数: - Return Type ofmain()
int main(void) { /* ... */ }
第三,您应该删除fflush(stdin)
,因为fflush()
使用stdint
是未定义的行为,因为它不是标准C的一部分。来自 C11 7.21.5.2 ,fflush
仅适用于输出/更新流,而不适用于输入流:
如果stream指向输入流或未输入最新操作的更新流,则fflush函数会将该流的任何未写入数据传递到主机环境以写入文件;否则,行为未定义。 - fflush(stdin)
答案 1 :(得分:0)
如何让我的代码更好或更有效?
我给你的建议是停止尝试通过反复试验方法学习C.你应该先获得一本好书然后再学习。如果不掌握指针,按位运算符和内存操作,就不可能创建快速和高效 C程序。
简单地说,为了使你的代码更快,你应该完全删除你的代码(我不会在这里列出你所有的不良做法)并开始理解我的例子:
int main(void){
char *s = (char*)malloc(33);
char *t = s;
int a;
s += 33;
*s = 0;
printf("Enter a number: ");
scanf("%d", &a);
printf("That number in binary: ");
while(a){
*(--s) = a & 1 ? '1' : '0';
a >>= 1;
}
printf("%s\n", s);
free(t);
return 0;
}
说明:我们有指针(如果你不知道指针,那么你应该先学习它们)s
指向一个字符串的结尾。虽然输入中的数字(数字a
)非零,但我们将其最后一位二进制数字放在字符串中,减少指针并将a
整数除以2
(这是a >>= 1
指令)。当a
为0
时,只需打印字符串。