C程序显示正方形而不是字符串

时间:2009-09-23 16:38:31

标签: c binary decimal

我用Java做了很多,但我现在正在努力学习c。我正在尝试制作一个程序,将数字从十进制转换为二进制。

这就是我所拥有的:

#include <stdio.h>
#define LENGTH 33

int main( int argc, char*argv[ ] )

{
 unsigned int number, base, remainder, x, i;
 char result[LENGTH];

 puts( "Enter a decimal value, and a desired base: " );
 scanf( " %u", &number );
 scanf( " %u", &base );

 x = number;

 for( i=0; i < LENGTH; i++ )
 {
  remainder = x % base;
  x = x/base;
  result[i] = remainder;
 }

 printf( "%u equals  %s  (base-%u) \n", number, result, base );    

 //***result is probably backwards...


 return 0;



}

以下是我运行时的结果:

Enter a decimal value, and a desired base: 
5 2
5 equals    (base-2) 

什么是正方形以及如何将其显示为字符串(字符数组)?

4 个答案:

答案 0 :(得分:4)

上次修改:您的程序可能如下所示:

 unsigned int number, base, remainder, x, i;
 char result[LENGTH+1] = {0};

 puts( "Enter a decimal value, and a desired base: " );
 scanf( " %u", &number );
 scanf( " %u", &base );

 x = number;

 for( i=0; i < LENGTH; i++ )

 {
  // if base > 10, use alphabet!
  result[i] = remainder > 9 ? (remainder-10) + 'A' : remainder + '0';
  x = x/base;
  result[i] = remainder + '0';
 }

首先,在写入余数时,应该添加数字的ASCII偏移量。

  result[i] = remainder + '0';

另外,您忘了在最后添加'\0'

 result[i] = 0;
 printf( "%u equals  %s  (base-%u) \n", number, result, base );

编辑:写入c-string时,我通常会将字符串初始化为零:

char result[LENGTH] = {0};

这样你最后不需要写null character,而是为你写的。


感谢@mmyers指出溢出:) 我会声明要保留LENGTH+1的字符串:

char result[LENGTH+1] = {0};

答案 1 :(得分:4)

您希望将数字存储为result[i]中的字符,而不是剩余的实际数字。对于(例如)16的基数,一种方法是索引到具有所需数字的辅助数组(可以是字符串文字)。

char digits[] = "0123456789ABCDEF";

/* stuff */

result[i] = digits[remainder];

/* more stuff */

此外,告诉您null终止字符串的其他注释完全正确。

编辑:无论您走哪条路线,都应确保base的值输入大于0且不大于您希望处理的最大值。

答案 2 :(得分:1)

您需要确保您的字符串在终端上显示的值介于32和127之间。

for( i=0; i < LENGTH; i++ )

 {
  remainder = x % base;
  x = x/base;
  result[i] = remainder;
 }

在本节中,您将小值放入数组中,因此它不会显示为ASCII字母。

您可能只想拥有以下内容:       结果[i] =余数+'0';

一种简单的方法是打印出字符串各部分的ascii值,看看它是什么值。

答案 3 :(得分:0)

这是学术练习吗?如果没有多少C编译器库包含完全符合您需要的itoa()函数。它不是由ISO标准C库定义的,但通常包含在大多数编译器中。