C 从整数到字符的数字数组和打印
我在C语言中有一个整数,我想创建一个字符数组,每次使用模10插入最后一个数字。在那之后,我需要从末端到开始打印数组,以便以正确的顺序打印数字。我知道这听起来很奇怪,但我必须像这样做 但有些东西不起作用。数组创建得很好,但字符打印不起作用。这就是我所做的:C 从整数到字符的数字数组和打印,c,arrays,C,Arrays,我在C语言中有一个整数,我想创建一个字符数组,每次使用模10插入最后一个数字。在那之后,我需要从末端到开始打印数组,以便以正确的顺序打印数字。我知道这听起来很奇怪,但我必须像这样做 但有些东西不起作用。数组创建得很好,但字符打印不起作用。这就是我所做的: int baseChange (int base, int newBase, int num) { int baseTen = toBaseTen(base, num); //give me a number on base 10
int baseChange (int base, int newBase, int num)
{
int baseTen = toBaseTen(base, num); //give me a number on base 10
char finalBase[24];
int i;
for (i = 0; baseTen != 0; i++)
{
int remain = baseTen % newBase;
finalBase[i] = (char)(remain); //insert the last digit to the array
baseTen /= newBase;
}
// Print finalBase from end to beginning in order to get the final number in the correct order:
for (i--; i >= 0; i--)
{
printf("i is: %d... %c", i, finalBase[i]);
}
return SUCCESS_EXIT;
}
如果我在第一个for循环中打印
finalBase[I]
,我会得到正确的数字,但在那之后,第二个for
循环不会打印任何内容。为什么?你是整数到字符的类型转换,所以它会把你的<代码> int >代码作为一个字符的ASCII值。它会将该字符而不是数字添加到数组中。因此,尝试以下方法:
int baseChange (int base, int newBase, int num)
{
int baseTen = toBaseTen(base, num); //give me a number on base 10
char finalBase[24];
int i;
for (i = 0; baseTen != 0; i++)
{
int remain = baseTen % newBase;
finalBase[i] = (char)(remain+48); //insert the last digit to the array
baseTen /= newBase;
}
// Print finalBase from end to beginning in order to get the final number in the correct order:
for (i--; i >= 0; i--)
{
printf("i is: %d... %c", i, finalBase[i]);
}
return SUCCESS_EXIT;
}
我改变了finalBase[I]=(char)(保留)代码>至最终数据库[i]=(字符)(保留+48)代码>
因为ASCII中的数字以48开头,所以将48添加到循环中得到的每个数字中,这样就可以将其转换为0-9
。就这样
第二个循环没有打印任何东西为什么
因为0-9中的ASCII不可打印,或者是空格和制表符
希望这对你有帮助 > p>您是整数类型的字符转换,因此它将把您的<代码> int >代码作为某个字符的ASCII值。它会将该字符而不是数字添加到数组中。因此,尝试以下方法:
int baseChange (int base, int newBase, int num)
{
int baseTen = toBaseTen(base, num); //give me a number on base 10
char finalBase[24];
int i;
for (i = 0; baseTen != 0; i++)
{
int remain = baseTen % newBase;
finalBase[i] = (char)(remain+48); //insert the last digit to the array
baseTen /= newBase;
}
// Print finalBase from end to beginning in order to get the final number in the correct order:
for (i--; i >= 0; i--)
{
printf("i is: %d... %c", i, finalBase[i]);
}
return SUCCESS_EXIT;
}
我改变了finalBase[I]=(char)(保留)代码>至最终数据库[i]=(字符)(保留+48)代码>
因为ASCII中的数字以48开头,所以将48添加到循环中得到的每个数字中,这样就可以将其转换为0-9
。就这样
第二个循环没有打印任何东西为什么
因为0-9中的ASCII不可打印,或者是空格和制表符
希望这对你有帮助 从int
到char
的强制转换将保留第一个char\u位
位,这是整数中的第一个8位保持
,因为后者将包含数字(当然,对于基数小于10的模),所以强制转换后,它们将保留其值
您的问题是在ASCII表中打印等效数字
printf
函数中的%c
说明符是指与ASCII表中的值等效的字符以及保存变量的内容
ASCII表中的前10个字符表示值0
到9
,相当于:
但数字字符的值从48到57(以10为基数/十进制):
因此,不是:
finalBase[i] = (char)remain;
您需要将其更改为:
finalBase[i] = remain + 48;
从int
到char
的转换将保留第一个char\u位
位,该位是整数中的第一个8位,保留为,并且后者将包含数字(当然,对于基数小于10的模),因此转换后将保留其值
您的问题是在ASCII表中打印等效数字
printf
函数中的%c
说明符是指与ASCII表中的值等效的字符以及保存变量的内容
ASCII表中的前10个字符表示值0
到9
,相当于:
但数字字符的值从48到57(以10为基数/十进制):
因此,不是:
finalBase[i] = (char)remain;
您需要将其更改为:
finalBase[i] = remain + 48;
当您执行finalBase[i]=(char)(remaine)时,您没有将remaine
转换为其ASCII代码
代码>
如果您的newBase
是,则在执行finalBase[i]=(char)(remaine)时,您没有将remain
转换为它的ASCII代码
代码>
如果您的newBase
对于启动器是,则此循环将启动
for (i = 0; baseTen != 0; i++)
{
int remain = baseTen % newBase;
finalBase[i] = (char)(remain); //insert the last digit to the array
baseTen /= newBase;
}
不正确,因为通常变量baseTen
的值最初可以等于0。在这种情况下,数组中不会写入任何内容
正确的循环可以如下所示
int i = 0;
do
{
finalBase[i++] = baseTen % newBase;
} while ( baseTen /= newBase );
对于应该显示数字的第二个循环,则需要将数字的相应表示输出为字符
比如说
while ( i-- )
{
printf( "i is: %d... %c\n", i, finalBase[i] + '0' );
^^^^^^^^^^^^^^^^^^^^^
}
while ( i-- )
{
printf( "i is: %d... %d\n", i, finalBase[i] );
^^
}
考虑到int
类型的值可能为负值。您应该注意在数组中写下负值
从'0'
到'9'
的字符具有顺序代码。因此,例如,如果要将1
添加到字符'0'
,您将得到字符'1'
也可以将数字输出为整数。比如说
while ( i-- )
{
printf( "i is: %d... %c\n", i, finalBase[i] + '0' );
^^^^^^^^^^^^^^^^^^^^^
}
while ( i-- )
{
printf( "i is: %d... %d\n", i, finalBase[i] );
^^
}
或者最初可以将数组中的数字存储为字符
int i = 0;
do
{
finalBase[i++] = '0' + baseTen % newBase;
} while ( baseTen /= newBase );
首先,这是一个循环
for (i = 0; baseTen != 0; i++)
{
int remain = baseTen % newBase;
finalBase[i] = (char)(remain); //insert the last digit to the array
baseTen /= newBase;
}
不正确,因为通常变量baseTen
的值最初可以等于0。在这种情况下,数组中不会写入任何内容
正确的循环可以如下所示
int i = 0;
do
{
finalBase[i++] = baseTen % newBase;
} while ( baseTen /= newBase );
对于应该显示数字的第二个循环,则需要将数字的相应表示输出为字符
比如说
while ( i-- )
{
printf( "i is: %d... %c\n", i, finalBase[i] + '0' );
^^^^^^^^^^^^^^^^^^^^^
}
while ( i-- )
{
printf( "i is: %d... %d\n", i, finalBase[i] );
^^
}
考虑到int
类型的值可能为负值。您应该注意在数组中写下负值
从'0'
到'9'
的字符具有顺序代码。因此,例如,如果要将1
添加到字符'0'
,您将得到字符'1'
也可以将数字输出为整数。比如说
while ( i-- )
{
printf( "i is: %d... %c\n", i, finalBase[i] + '0' );
^^^^^^^^^^^^^^^^^^^^^
}
while ( i-- )
{
printf( "i is: %d... %d\n", i, finalBase[i] );
^^
}
或者最初可以将数组中的数字存储为字符
int i = 0;
do
{
finalBase[i++] = '0' + baseTen % newBase;
} while ( baseTen /= newBase );
需要对编码进行假设总是一个麻烦的来源。为什么不使用简单的地图呢?无需对编码进行任何假设,您甚至可以对数字使用完整的Unicode范围(Whic