我正在尝试编写一个代码以在 C.Tho 中将 int 转换为罗马数字,我的代码是完全有效的,但输出中打印了几个额外的字符



代码如下:

#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只附加在垃圾字节之后——这应该足以给你一个非常强的线索。

相关内容

最新更新