我正在使用Microsoft Visual Studio来学习C,我写了一些代码,它运作良好。但是当我尝试使用xcode进行调试时,它无法正常工作。
这是我将数字转换为罗马数字的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int dec,length,indice,irom,itab=0;
char rom[4][5]={'\0'};
char dconvert[10];
char convert[2];
char tab[7]={'I','V','X','L','C','D','M'};
float dec2;
puts("give a number");
scanf("%d",&dec);
itoa(dec,dconvert,10);
length=strlen(dconvert);
strrev(dconvert);
for (indice=0; indice < length;indice ++)
{
convert[0]=dconvert[indice];
dec=atoi(convert);
if (dec<=3)
{
for (irom=0; irom<dec;irom++)
{
rom[indice][irom]=tab[itab];
}
}
if (dec>3 && dec<9)
{
irom=0;
dec2=dec-5;
if (dec2<0)
{
rom[indice][irom]=tab[itab];
rom[indice][irom+1]=tab[itab+1];
}
else
{
rom[indice][irom]=tab[itab+1];
for (irom=1;irom<=dec2;irom++)
{
rom[indice][irom]=tab[itab];
}
}
}
if (dec==9)
{
irom=0;
rom[indice][irom]=tab[itab];
rom[indice][irom+1]=tab[itab+2];
}
itab=itab+2;
}
for (indice=length; indice>=0;indice--)
{
printf("%s",rom[indice]);
}
}
答案 0 :(得分:1)
如上所述,itoa
不是C99标准的一部分。相反,使用sprintf
(或snprintf
来避免缓冲区溢出):
sprintf(target_string, "%d", int_value);
答案 1 :(得分:1)
您可以使用:
snprintf(str, sizeof(str), "%d", num);
以避免缓冲区溢出(当您转换的数字不符合字符串的大小时)。
答案 2 :(得分:1)
itoa和strrev都不是标准的。
其他StackOverflow问题:
Where is the itoa function in Linux?
Is the strrev() function not available in Linux?
修复这两个问题可能会解决中间问题,但如果没有,请阅读http://forums.bignerdranch.com/viewtopic.php?f=77&t=1743