代码如下:
#include <stdio.h>
#include <string.h>
int indexFinder(int num, int array[])
{
int index;
for (int i = 0; i < 21; i++ )
{
if (num - array[i] < 0)
{
index = i - 1;
break;
}
}
return(index);
}
int main()
{
// Required information for translation :
// User Input
int num ;
// Data
int reqNum[21] = {1,4,5,9,10,40,50,90,100,400,500,900,1000,4000,5000,9000,10000,40000,50000,90000,100000};
char romSym[21][6] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M", "M_V", "_V", "M_X", "_X", "_X_L", "_L", "_X_C", "_C"};
// Asking for user input
printf("Enter a number: ");
scanf("%d", &num);
// Main Running Code
char translation[30];
int ind;
while (num > 0)
{
ind = indexFinder(num, reqNum);
strcat(translation, romSym[ind]);
num -= reqNum[ind];
}
printf ("%s", translation);
return 0;
}
输出Enter a number: 23456
�n��_X_XMMMCDLVI
出现的额外字符是因为像我最初假设的那样使用了strcat()。但是在创建了我自己的函数来添加两个字符串之后,它仍然有同样的问题。
在python中类似的代码工作得很好,但是这里。
请帮
strcat
在目标字符串以null结尾的假设下工作。
你需要将你的字符串初始化为null-bytes -char translation[30] = {0};
。
供将来参考-通常,当您看到"垃圾字符"像�n��_X_XMMMCDLVI
-这是一个迹象,某些东西在你的字符串损坏。你可以通过在while循环的每次迭代中打印translation
字符串来调试这个问题,看看它是如何变化的——你会在第一次迭代中看到它充满了垃圾字节,在下一次迭代中strcat
只附加在垃圾字节之后——这应该足以给你一个非常强的线索。